Xamarin + WCF + SSL + 传输 + 证书

Xamarin + WCF + SSL + Transport + Certificate

我有一个 Net Framework 4.5 WCF 服务,运行 async/task 方法。它部署在有效的 URL 上,具有正确的 Digicert 证书,确保域。我们有一个 "client certificate",带有一个 "one-to-one" 映射,并且对于我们的 "Winforms" 应用程序来说一切正常。 现在,我们不想从 Android/iOS Xamarin 项目中调用它。 我们知道 Xamarin 不支持 wsBinding,所以我们正在使用这个配置:

服务器

<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>

我们从 SVCUTIL.EXE 创建了一个代理,然后我们手动实现了异步方法、通道创建,因为 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 

但是...没有任何反应...超时....

服务器没问题。可以从 iOS 模拟器访问 url。我们只能使用 "basicHttpBinding",但是,我们想使用 SSL+客户端证书。

有什么想法吗?现在我卡住了。

再多的努力也白费了。到目前为止,WCF Xamarin 非常短。 我必须接受 HTTPs 和基本的传输安全(安全模式="Transport")。

我必须使用那个 Wcf 服务...但是如果你,可怜的人,正在阅读这个之前的新开发,请使用 REST 服务。他们有更好的 Xamarin 支持。