如何为需要客户端身份验证证书的web服务向WCF客户端添加服务引用

如何为需要客户端身份验证证书的web服务向WCF客户端添加服务引用,wcf,authentication,wcf-binding,wcf-client,Wcf,Authentication,Wcf Binding,Wcf Client,注意,WCF noobie警报 我需要创建一个WCF客户端来查询非WCF web服务。 web服务不是WCF服务。此外,web服务需要客户端身份验证证书。现在,我有了证书,可以创建一个工作完美的非WCF客户端;我可以“添加Web引用”,打开一个证书对话框,允许我选择合适的证书,然后继续创建Web引用。尝试通过“添加服务引用”创建WCF客户端是另一回事,它只是失败了,出现403拒绝访问错误 我有服务的WSDL,并在其上运行了svcutil.exe,但不确定如何从那里继续 谢谢你的帮助 我假设您使用

注意,WCF noobie警报

我需要创建一个WCF客户端来查询非WCF web服务。 web服务不是WCF服务。此外,web服务需要客户端身份验证证书。现在,我有了证书,可以创建一个工作完美的非WCF客户端;我可以“添加Web引用”,打开一个证书对话框,允许我选择合适的证书,然后继续创建Web引用。尝试通过“添加服务引用”创建WCF客户端是另一回事,它只是失败了,出现403拒绝访问错误

我有服务的WSDL,并在其上运行了svcutil.exe,但不确定如何从那里继续


谢谢你的帮助

我假设您使用的服务正在执行客户端SSL身份验证

由于添加服务引用失败,您可以使用现有的。我认为语法应该是这样的:

svcutil *.wsdl /l:C# /out:Reference.cs /config /s /ct:System.Collections.Generic.List`1 /ser:Auto /tcv:Version35 /n:*,<NameOfYourNamespaceHere> /edb
这将生成一个文件Reference.cs,其中包含服务的代理类,您可以为该文件指定任何名称。将此文件添加到项目中。还将生成一个配置文件output.config。您可以将此配置添加到应用程序配置中,而无需手动键入所有配置

现在,您可以阅读这篇有关使用的MSDN文章。您可以跳到“客户端”部分,其中显示了如何在代码和配置中将证书附加到请求


祝你好运。

也许是个愚蠢的问题:你能连接到服务端点,用证书中存储的凭据展示它,然后从那里下载WSDL和XSD吗?或者可能是提供此服务的实体能够实际向您发送这些文件或使其可供下载

一旦在磁盘上有了WSDL和XSD文件,就可以很容易地使用svcutil.exe或基于这些文件添加服务引用为其创建WCF客户端,然后为其配置适当的安全性

只是一个想法。。。。价值0.02美元


Marc

我知道这是一个老问题,它已经解决了,但我想指出的是,添加服务引用也适用于存储在磁盘上的WSDL文件。马克也提到了这一点。“添加服务引用”对话框接受:

WSDL的URL 元数据交换终结点的URL 内部添加/mex的服务URL WSDL文件的任何文件路径
所以,如果您有WSDL并且所有需要XSD文件,那么您也可以使用添加服务引用。唯一棘手的部分是“添加服务引用”对话框没有“浏览”按钮,这就是为什么该功能不为人所知的原因。

好的,这里有一些工作,我不知道技术上会发生什么:我注意到,当您添加Web引用时,您选择的证书将被缓存,并在下次添加我注意到的Web引用时自动使用,因为我选择了错误的证书。此缓存似乎可以跨Web引用和服务引用工作,因此:

选择要使用的证书,向终结点添加Web引用 删除此Web引用 将服务引用添加到同一端点,Visual Studio将使用为Web引用选择的同一证书
工作于Visual Studio Community 2019,v16.7.7

您的开发计算机上安装了客户端身份验证证书吗?+1的额外注释“地址”字段采用文件路径且没有“浏览”按钮并不明显。