如何在Web服务中从WSDL生成代理类

14

假设我只有一个 WSDL 文件,那么我如何创建代理类来调用 Web 服务的各种方法。Web 服务相关的所有类及其属性和方法将在我的 C# 应用程序中公开。有谁可以帮助指导我。谢谢。


3
搜索wsdl.exesvcutil.exe - L.B
谢谢,但据我所知,svcutil与WCF有关,而不是WebService,但我不确定...请解释一下。 - Thomas
请注意,微软建议使用svcutil.exe而不是wsdl.exe,因为后者被认为是传统技术。链接为:http://msdn.microsoft.com/en-us/library/7h3ystb6.aspx - Jesse C. Slicer
4个回答

8

当我们添加Web引用时,需要知道Web服务的URL,但在某些情况下,我看到第三方公司只提供WSDL文件。如果我从WSDL生成代理,则代理如何与Web服务交互?代理类如何知道Web服务的实际URL...您能讨论一下这个概念吗? - Thomas
任何Web服务的URL都存储在WSDL文件中吗?它存储在哪个标签中?请给我一个样本WSDL代码,以便指出Web服务URL是如何存储在WSDL文件中的。谢谢。 - Thomas
代理程序在生成时没有有关服务端点的信息。当您实例化代理(或通道)时,必须提供要使用的绑定和端点。此信息也可以从配置文件中读取,上述工具也会生成该文件。请参阅http://msdn.microsoft.com/en-us/library/ms576141.aspx。 - lesscode
在WSDL文件中,服务端点信息位于<definitions>/<service>/<port>/<address>下。 - lesscode

8

有一个实用程序,它随着Visual Studio一起提供(我认为是从2005年开始),名为wsdl.exe

它是命令行工具,可用于生成代理。


当我们添加Web引用时,需要知道Web服务的URL,但在某些情况下,我看到第三方公司只提供WSDL文件。如果我从WSDL生成代理,则代理如何与Web服务交互?代理类如何知道Web服务的实际URL...您能讨论一下这个概念吗? - Thomas
与引用添加的代理相同。代理本身不包含有关 WebService 位置的信息。Web 服务配置在 Web.config/app.config 文件中。添加 webreference 会生成客户端配置。当您自己添加代理时,您必须自己添加配置。或者,您应该能够将 URL 作为客户端构造函数参数传递。 - Varius

3
你可以使用命令行来使用WSDL.exe工具。
例如:WseWsdl3 WSDL路径 /out:MyProxyClass.cs

语法可能有误。当我们添加 Web 引用时,需要知道 Web 服务的 URL,但在某些情况下,我看到第三方公司只提供 WSDL 文件。如果我从 WSDL 生成代理,则代理如何与 Web 服务交互?代理类如何知道实际的 Web 服务 URL……您能讨论一下这个概念吗? - Thomas
WSDL确实有一个服务地址,如soap:address标记。一旦您生成代理,它应该在您的配置中生成一个配置值,以确定用于交互的哪个服务URL。 - VRK

1

如果WseWsdl3.exe无法创建代理类,还有一种方法。

如果您可以将服务作为常规ASP.NET Web应用程序在IIS中运行,则会创建临时的ASP.NET文件,其中代理类会为您生成。

您可以在以下文件夹中找到它:

C:\Windows\Microsoft.NET\Framework\vMAJOR.MINOR.BUILD\Temporary ASP.NET Files\YOUR_WEB_APP。

有一些带有随机名称的子文件夹,请转到最近的一个并查找类似于“App_WebReferences.XXXX.0.cs”的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接