비동기/작업 방법으로 실행되는 Net Framework 4.5 WCF 서비스가 있습니다. 올바른 URL에 올바른 Digicert 인증서가 배포되어 도메인을 보증합니다. 우리는 "일대일"매핑을 가진 "클라이언트 인증서"를 가지고 있으며, "Winforms"어플리케이션을위한 모든 인증을 가지고 있습니다. 이제 Android/iOS Xamarin 프로젝트에서 호출하지 않을 것입니다. 다음, 우리가 수동으로 비동기 메소드를 구현해야, 우리는 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>
: 우리는 자 마린은 wsBinding를 지원하지 않는 것을 알고, 그래서 우리는이 설정을 사용하는 것 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에서 모든 프록시를 생성합니다. –
@ 유리 나는 위험을 decompiling 생각하지 않을거야, 나는 당신의 견해를 이해합니다. 슬프게도 나는 더 나은 대안을 얻지 못하기 때문에 basichttpbinding을 스스로 준수해야합니다. – Caveman
certs 대신 username/password auth를 사용할 수 있습니까? –