从WSDL文件在Visual Studio中创建Web服务代理


101

我的应用程序需要与没有在线WSDL定义的Web服务进行对话。但是,开发人员向我提供了WSDL文件。

使用公共WSDL,Visual Studio可以使用“服务参考”向导为我生成此代码。但是,如果没有公共的WSDL,它似乎无法工作。

如何使用此WSDL文件生成用于与此Web服务对话的代码?

Answers:


116

尝试使用WSDL.exe,然后将生成的文件(.cs)包含到项目中。

启动Visual Studio命令提示符(在开始菜单的Visual Studio /工具下),然后键入

>wsdl.exe [path To Your WSDL File]

这将吐出一个文件,您将其复制/移动并包含在您的项目中。该文件包含一个类,该类是您的服务的代理,启动该类的实例,它将具有可即时设置的URL属性,以及一堆可调用的方法。它还将为通过服务接口传递的所有/任何复杂对象生成类。


2
谢谢!您可以使用/ o参数导出文件的路径。例如> wsdl.exe example.com/service.wsdl / o:C:\ Users \ X \ Desktop
gkonuralp

2
并且可以选择手动添加一个覆盖所有类的名称空间,以防止与生成的类似文件冲突。
Blue Clouds'Mar

138

使用WSDL.exe对我不起作用(给我有关缺失类型的错误),但是我能够在VS中的项目上单击鼠标右键,然后选择“添加服务引用”。我在“地址”字段中输入了wsdl文件的路径,然后单击“开始”。那似乎能够找到所有适当的类型并将类直接添加到我的项目中。


3
面对相同的情况,您的建议为我省去了很多挫败感,甚至还使我省下了不少精力。当之无愧的代表已经给了你。(作为间接结果,您在所有站点上都获得+100的收益:))
影子巫师为您而耳(

我试过了,文件导入了,但是我在代码
中看不到

1
我使用MSVC 2015尝试了此方法,但它拒绝使用URL处理wsdl文件。因此,我使用了安德鲁·M(Andrew M.)所描述的方法
赫尔曼(Hermann)2015年

1
我是从没有访问Web服务权限的开发PC上尝试过的。尽管.wsdl文件位于本地,但是当我单击“ Go”时,它仍尝试连接服务。因此,我无法添加参考。在这种情况下,我认为应首选Andrew M.的解决方案。效果很好。
gkonuralp

@jeffaudio我遇到了类似的问题,我能够为Web项目添加服务引用,但是使用wsdl.exe我无法生成代理文件。任何建议.. ???
prakash r

15

附带说明:如果您在本地拥有所有文件(不仅是wsdl文件,还包括xsd文件),则可以通过以下方式调用wsdl.exe:

wsdl.exe [path to your wsdl file] [paths to xsd files imported by wsdl]

这样,wsdl.exe可以本地解析所有依赖项并正确生成代理类。

也许可以节省一些时间-解决无法在线提供服务时出现的“缺少类型”错误。



2

有一个Microsoft Doc用于WCF从命令行创建代理。

你可以找到你的本地副本wsdl.exe中类似这样的一个位置:C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools此处了解详情

最后,您Command应该看起来像这样:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\wsdl.exe"
 /language:CS /n:"My.Namespace" https://www.example.com/service/wsdl


-1

由于Web服务的真实绑定URL位于文件中,因此可以从本地计算机执行以下简单步骤:

1)将文件保存到本地计算机,例如:

C:\Documents and Settings\[user]\Desktop\Webservice1.asmx

2)在Visual Studio中,右键单击您的项目>选择“添加Web引用”,将打开一个对话框。

3)在“ URL”框中,将本地文件位置复制到C:\ Documents and Settings [user] \ Desktop \ Webservice1.asmx上方,单击“下一步”。

4)现在您将看到功能出现,选择您的名称作为参考,单击添加参考

5)您完成了!您可以开始将其用作应用程序中的命名空间,不必担心您使用了本地文件,因为无论如何,该服务的真实URL位于Binding部分的文件中。


2
现有答案中已经有人建议这样做,为什么要重复?
暗影巫师为您耳边2013年

关于wsdl的问题,为什么要使用asmx文件?
蓝云
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.