Visual Studio WCF连接服务证书验证

时间:2016-04-22 20:39:55

标签: wcf ssl visual-studio-2015

我需要使用WCF服务。我正在使用ASP.NET 5,所以必须使用扩展 Visual Studio WCF连接服务。当我尝试将WCF服务引用添加到我的类库时,我不能这样做,因为证书的验证。我在我的计算机上安装了证书,但似乎无法正常工作。 在项目中添加服务时,如何忽略证书的验证? 使用完整的.NET Framework,可以通过添加

来完成
ServicePointManager.ServerCertificateValidationCallback +=
(sender, cert, chain, sslPolicyErrors) => true;
var service = new DataServiceSoapClient("DataServiceSoap");

但这是在向项目添加服务引用之后,我的问题是在添加服务时。

错误的完整描述是:

Scaffolding Code ...
Attempting to download metadata from  'https://login.uh.cu/webservices/dataservice.asmx' using WS-Metadata Exchange and HttpGet.

Error:Error: Cannot obtain Metadata from     https://login.uh.cu/webservices/dataservice.asmx 
If this is a Windows (R) Communication Foundation service to which you have      access, please check that you have enabled metadata publishing at the specified     address.  For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.
WS-Metadata Exchange Error
URI: https://login.uh.cu/webservices/dataservice.asmx
Metadata contains a reference that cannot be resolved: 'https://login.uh.cu/webservices/dataservice.asmx/mex'.
Could not establish trust relationship for the SSL/TLS secure channel with authority 'login.uh.cu'. 
The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.    
The remote certificate is invalid according to the validation procedure.    

Failed to generate service reference.

1 个答案:

答案 0 :(得分:1)

一般情况下,托管SSL并不是一个好习惯 - "安全"使用无效证书的服务......无论如何,我最近与客户合作,使用自签名证书公开他们的所有服务。

正如您已经注意到的那样,您需要一种方法来接受"设置ServerCertificateValidationCallback之前的不受信任的源,因为稍后在执行ASP.NET站点时在您的用户代码中使用该回调。添加服务引用时,此回调尚未使用。 但请记住,通常使用上述代码验证任何证书是危险的。你不应该在生产中使用它!

尝试通过resp添加服务引用时。它拒绝这样做的Visual Studio对话框,因为VS无法验证远程证书。确切地说,你遇到的问题。 解决此问题的一种方法是通过浏览器调用WSDL。您的浏览器通常允许您跳过SSL警告。这样做可以手动将WSDL保存到本地文件,并使用该文件让VS添加服务引用。

为了向您展示一个示例,我通过使用全球气象服务(根本不是SSL保护,但无论如何都可以作为示例)来说明这种方法。

其asmx服务位于http://www.webservicex.net/globalweather.asmx。通过添加?wsdl,您通常可以直接检索WSDL:http://www.webservicex.net/globalweather.asmx?wsdl

您可以对您的服务执行相同的操作:https://login.uh.cu/webservices/dataservice.asmx?wsdl

然后,您的浏览器应提示您应该能够跳过的SSL警告。跳过警告的方式取决于您使用的浏览器。也许看看this

跳过警告后,您应该直接在浏览器中看到WSDL。作为一个例子,我使用谷歌浏览器:

enter image description here

然后,您可以右键单击结果并将其保存在本地磁盘上的任何位置。

回到Visual Studio,您可以通过指向本地保存的WSDL文件,通过添加引用对话框添加服务:

enter image description here