httpsを介してAndroidアプリケーションをWebサービスに接続しようとしていますが、
System.Net.WebException:Webリクエストの処理中にエラーが発生しました:ステータスコード403(禁止):禁止
Webサービスはブラウザで問題ないようです。Androidにも証明書をインストールしましたが、ブラウザから警告が表示されます。
これが私の方法です
public static string HttpSoap2()
{
var binding = new BasicHttpBinding () {
Name= "basicHttpBinding",
MaxReceivedMessageSize = 67108864,
};
binding.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas() {
MaxArrayLength = 2147483646,
MaxStringContentLength = 5242880,
};
var timeout = new TimeSpan(0,1,0);
binding.SendTimeout= timeout;
binding.OpenTimeout = timeout;
binding.ReceiveTimeout = timeout;
Service1Client client;
client = new Service1Client(binding, new EndpointAddress(url));
// This will allow us to ignore the validation of the server-side certificate while maintaining
// transport encryption.
System.Net.ServicePointManager.ServerCertificateValidationCallback +=
(se, cert, chain, sslerror) => { return true; };
return client.Greeting ("LOL");
}
これは私のWeb設定です
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<bindings>
<basicHttpsBinding>
<binding name="myBinding">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</basicHttpsBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="myBehaviour">
<!-- To avoid disclosing metadata information, set the values below to false before deployment -->
<serviceMetadata httpsGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
<!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
<service name="MyHelloService.Service1" behaviorConfiguration="myBehaviour">
<host>
<baseAddresses>
<add baseAddress="https://10.XXX.XX.XX:443"/>
</baseAddresses>
</host>
<endpoint address=""
binding="basicHttpsBinding"
bindingConfiguration="myBinding"
contract="MyHelloService.IService1" />
<endpoint address="Service1.svc/mex"
binding="mexHttpsBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
私は何かを忘れていますか?
アップデート
証明書がインストールされていないようです
自己署名からエクスポートしたpfxをアップロードし、それをsdcardに送信して、ブラウザーを開いてsdcardからインストールしようとしましたが、これを取得します413.16クライアント証明書が信頼されていないか無効です
その間、私はすでにクレデンシャルを使用して何かが変更されるかどうかを確認するためにサービスを変更しようとしました。すべてが同じままでした