私はAsync/Taskメソッドで動作するNetFlow 4.5 WCFサービスを持っています。正しいDigicert証明書を使用して有効なURLに配備され、ドメインを保証します。私たちは "1対1"のマッピングを持つ "クライアント証明書"を持っていて、 "Winforms"アプリのためにすべてOKです。 Android/iOS Xamarinプロジェクトから呼び出すことはできません。 我々はXamarinはのWSBindingをサポートしていないので、私たちは、この設定を使用しているしていることを知っている:私たちはSVCUTIL.EXEからプロキシを作成しXamarin + WCF + SSL +トランスポート+証明書
サーバー
<system.serviceModel>
<services>
<service
name="serviceWCF.nameService"
behaviorConfiguration="behavior_base">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="transport"
contract="serviceWCF.nameInterfaceService" />
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="transport">
<security mode="Transport" >
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="behavior_base">
<serviceMetadata httpsGetEnabled="true" httpsGetUrl=""/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
、そして我々は、手動で非同期メソッドを実装していますXamarinはディナミンバインディングなどをサポートしていないため、チャンネル作成は必要ありません。
当社Xamarinのクライアントアプリケーションのプロキシ、それがそのように呼び出されています:
BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
AddressHeader addressHeader2;
AddressHeader[] addressHeaders;
EndpointAddress endpoint;
addressHeader2 = AddressHeader.CreateAddressHeader("nameapp_iOS", "https:\\URL_WCF_Service.svc", 0);
addressHeaders = new AddressHeader[]{ addressHeader2};
endpoint = new EndpointAddress(new System.Uri("https:\\URL_WCF_Service.svc"),addressHeaders);
System.Security.Cryptography.X509Certificates.X509Certificate2 oCert;
oCert = new System.Security.Cryptography.X509Certificates.X509Certificate2(System.IO.File.ReadAllBytes("CertBundle.pfx"), "pass");
Service_MovilClient oProxy = new Service_MovilClient(binding, endpoint);
Service_MovilClient oProxy.ClientCredentials.ClientCertificate.Certificate = oCert
しかし...何も起こりません...時間を....
それは大丈夫ですサーバー。 urlには、iOSエミュレータからアクセスできます。 "basicHttpBinding"だけで使用できますが、SSL +クライアント証明書を使用したいと考えています。
アイデア?今私は立ち往生している。
特に、このファイルに秘密鍵が必要であるため、すべての電話機に証明書ファイルを持たせることをお勧めします。 Xamarin大学にはAuthに関するビデオがあり、可能なすべてのシナリオについて話し合っています。あなたがそれにアクセスできるなら、私はそれを見ることをお勧めします。また、Xamarinのプロキシを作成するには、Silverlightツールを使用するか、VS Studioから実行する必要があります。 ASASK svcutilプロキシはXamarinには適していません。 VSからすべてのプロキシを生成します。 –
@YuriS私はリスクの逆コンパイルを考えていませんが、私はあなたの考えを理解しています。悲しいことに、私はbasichttpbindingに自分自身を準拠させる必要があります。なぜなら、より良い選択肢が得られないからです。 – Caveman
certsの代わりにusername/password authを使用できますか? –