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

时间:2009-08-16 03:08:43

标签: wcf authentication wcf-binding wcf-client

警告,WCF noobie警报

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

我有服务的WSDL,并且已经运行了svcutil.exe,但我不确定如何从那里继续。

感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

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

由于添加服务引用失败,您可以使用svcutilgenerate the client from the WSDL file。我认为语法类似于:

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文章使用Transport Security with Certificate Authentication。您可以跳到客户端部分,其中显示如何在代码和配置中将证书附加到请求。

祝你好运。

答案 1 :(得分:4)

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

  • WSDL的URL
  • 元数据交换端点的URL
  • 内部添加/ mex的服务URL
  • WSDL文件的任何文件路径

因此,如果您有WSDL并且所有需要XSD文件,您也可以使用添加服务引用。唯一棘手的部分是添加服务引用对话框没有浏览按钮,这就是为什么这个功能不为人所知的原因。

答案 2 :(得分:1)

愚蠢的问题(可能):您是否可以连接到服务端点,将其与存储在证书中的凭据一起提供,然后从那里下载WSDL(可能还有XSD)?或者,提供此服务的实体是否能够实际向您发送这些文件(或使其可供下载)?

在磁盘上安装WSDL(和XSD)文件后,根据这些文件创建WCF客户端(使用svcutil.exeAdd Service Reference)应该很容易,然后配置适当的安全性。

只是一个想法....(价值0.02美元?)

马克

答案 3 :(得分:0)

好的,这里有一点解决方法(我不知道技术上发生了什么):我注意到当您添加 Web 引用时,您选择的证书会被缓存并在您下次使用时自动使用添加 Web 参考(我注意到是因为我选择了错误的证书)。这种缓存似乎适用于 Web 引用和服务引用,因此:

  • 向端点添加 Web 引用,选择您要使用的证书
  • 删除此 Web 引用
  • 向同一端点添加服务引用,Visual Studio 将使用您为 Web 引用选择的相同证书

致力于 Visual Studio Community 2019, v16.7.7