我在开发服务器(IIS)上有一个WCF服务。该服务启用了自签名 SSL 和用户名身份验证。
我已经设置了一个测试ASP MVC项目,该项目可以成功调用服务中的数据,如下所示:
CategoryServiceClient csc = new CategoryServiceClient();
csc.ClientCredentials.UserName.UserName = "Username";
csc.ClientCredentials.UserName.Password = "Password";
ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
var a = csc.GetCategories();
当我使用自签名证书时,在这种情况下,对ServicePointManager.ServerCertificateValidationCallback
的调用有效。
问题是我想将此服务用于 Xamarin 项目,这需要我使用 SlSvcUtil.exe 来构建客户端代码。
在命令提示符下,我导航到 SLSvcUtil 目录:
cd C:Program Files (x86)Microsoft SDKsSilverlightv5.0Tools
然后我运行这个cmd来生成代码文档:
SlSvcUtil.exe https://x.x.x.x:2022/CategoryService.svc /directory:"c:UsersShaunDesktopServices"
此操作失败并显示以下错误:
The underlying connection was closed: Could not establish trust relationship for the SSL/TSL secure channel.
如何在没有验证检查的情况下运行此命令或像我的代码示例一样自动通过验证?
-或-
如何使用 Xamarin 为使用 SSL 的 WCF 服务生成服务引用?
-或-
如何使我的自签名(开发)SSL 证书能够建立信任关系?
问题是 Xamarin 不能很好地与 SSL 或与 WCF 一起使用的引用类型。
最后,我们丢弃了WCF组件,并使用了ASP Web API。
JSON来回切换,需要更多的腿部工作,但它更容易使用/调试,并且恰好也更加交叉兼容。