我在开发服务器(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 SDKs\Silverlight\v5.0\Tools
然后我运行此cmd以生成代码文档:
SlSvcUtil.exe https://x.x.x.x:2022/CategoryService.svc /directory:"c:\Users\Shaun\Desktop\Services"
此操作失败,并显示以下错误:
The underlying connection was closed: Could not establish trust relationship for the SSL/TSL secure channel.
如何在没有验证检查的情况下运行此命令,或者像我的代码示例一样自动传递验证?
-OR -
如何使用Xamarin为使用SSL的WCF服务生成服务引用?
-OR -
如何让我的自签名(开发)SSL证书能够建立信任关系?
答案 0 :(得分:0)
问题在于Xamarin在使用SSL或与WCF一起使用的引用类型方面不能很好地工作。
最后,我们删除了WCF组件并使用了ASP Web API。
来回JSON,需要更多的腿部工作,但它更容易使用/调试,并且碰巧也更加交叉兼容。