3

小心,WCF noobie 警报

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

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

谢谢你的帮助!

4

4 回答 4

5

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

由于添加服务引用失败,您可以使用svcutil从您拥有的 WSDL 文件生成客户端。我认为语法将类似于:

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 文章,了解将传输安全与证书身份验证结合使用。您可以跳到客户端部分,它显示了如何在代码和配置中将证书附加到请求中。

于 2009-08-16T06:50:05.827 回答
5

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

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

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

于 2010-08-21T18:05:09.903 回答
1

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

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

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

马克

于 2009-08-16T11:17:42.080 回答
0

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

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

在 Visual Studio Community 2019,v16.7.7 上工作

于 2021-01-11T06:56:08.490 回答