警告,WCF noobie警报
我需要创建一个WCF客户端来查询非WCF Web服务。 Web服务不是WCF服务。此外,Web服务需要客户端身份验证证书。现在,我有了证书,可以创建一个完美运行的非WCF客户端;我能够“添加Web引用”并打开一个证书对话框,允许我选择适当的证书,然后继续创建Web引用。尝试通过“添加服务引用”创建WCF客户端是另一个故事,它只是因为403拒绝访问错误而失败。
我有服务的WSDL,并且已经运行了svcutil.exe,但我不确定如何从那里继续。
感谢您的帮助!
答案 0 :(得分:4)
我假设您使用的服务正在执行客户端SSL身份验证。
由于添加服务引用失败,您可以使用svcutil到generate 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并且所有需要XSD文件,您也可以使用添加服务引用。唯一棘手的部分是添加服务引用对话框没有浏览按钮,这就是为什么这个功能不为人所知的原因。
答案 2 :(得分:1)
愚蠢的问题(可能):您是否可以连接到服务端点,将其与存储在证书中的凭据一起提供,然后从那里下载WSDL(可能还有XSD)?或者,提供此服务的实体是否能够实际向您发送这些文件(或使其可供下载)?
在磁盘上安装WSDL(和XSD)文件后,根据这些文件创建WCF客户端(使用svcutil.exe
或Add Service Reference
)应该很容易,然后配置适当的安全性。
只是一个想法....(价值0.02美元?)
马克
答案 3 :(得分:0)
好的,这里有一点解决方法(我不知道技术上发生了什么):我注意到当您添加 Web 引用时,您选择的证书会被缓存并在您下次使用时自动使用添加 Web 参考(我注意到是因为我选择了错误的证书)。这种缓存似乎适用于 Web 引用和服务引用,因此:
致力于 Visual Studio Community 2019, v16.7.7