如何使用WSDL


126

我需要使用Web服务。他们向我发送了WSDL文件。我应该怎么做才能将其添加到我的网站并开始将其用作代理。(如果将其放在虚拟目录中,可以发现它,但是它是否授予我与真实Web服务的连接?)


9
好吧,我赞成,因为这是我认为这里的其他用户将从中得到的答案中受益的问题。我一直在寻找这个确切的问题,很高兴在这里找到它。
schizoid04 2015年

Answers:


138

我将启动Visual Studio,创建一个Web项目(或控制台应用程序-没关系)。

对于.Net标准:

  1. 我将右键单击该项目,然后从“ 添加”上下文菜单中选择“添加服务参考” 。
  2. 我将单击“高级”,然后单击“添加服务参考”。
  3. 我将获得wsdl的完整文件路径并将其粘贴到地址栏中。然后发射箭头(执行按钮)。
  4. 如果尝试加载文件时出现错误,则文件必须解析,其中包含一个损坏且无法解析的url,如下所示: 在此处输入图片说明 有关如何修复的信息,请参考此答案: Stackoverflow答案:无法为以下内容创建服务参考wsdl文件

如果没有错误,则只需设置要用于访问服务的NameSpace,它将为您生成。

对于.Net Core

  1. 我将右键单击该项目,然后从“添加”上下文菜单中选择“连接的服务”。
  2. 我将从列表中选择Microsoft WCF Web服务引用提供程序。
  3. 我将按浏览并立即选择wsdl文件,设置名称空间,我很好。如果遇到任何错误,请参考上面的错误修复URL。

以上任何一种方法都会生成一个简单的,非常基本的WCF客户端供您使用。您应该在生成的代码中找到一个“ YourservicenameClient”类。

作为参考,可以在您的Obj / debug(或发行版)/ XsdGeneratedCode中找到生成的cs文件,并且您仍然可以在TempPE文件夹中找到这些dll。

创建的服务应具有WSDL合同上每个已定义方法的方法。

实例化客户端并调用您要调用的方法-就是所有!

YourServiceClient client = new YourServiceClient();
client.SayHello("World!");

如果需要指定远程URL(不使用默认创建的URL),则可以在代理客户端的构造函数中轻松地做到这一点:

YourServiceClient client = new YourServiceClient("configName", "remoteURL");

where configName是要使用的端点的名称(您将使用除URL之外的所有设置),并且remoteURL是一个字符串,代表要连接的URL(而不是配置中包含的URL)。


这很好。仅一个问题,如果我的机器上有wsdl文件,并将引用添加到该文件。执行Url时,它是托管Web服务的主机,还是我必须指定Binding和EndPoint?
jmayor

1
这取决于您-默认情况下,为客户端代理创建的代码将具有WSDL中包含的URL-如果需要转到另一个URL,则需要自己指定。
marc_s

为什么这么容易?没有收获吗?:p谢谢!
奥德斯2013年

1
作为公认的答案,如果您还提到如何也通过URL使用网络托管的WSDL,那将是很好的。
卡托

我认为我已经很接近使它起作用。我已经使用“添加服务参考”工具安装了Web服务。我可以实例化客户端,但是调用方法是我失败的地方。终点是使用Java实现,我只能看到XML。我试图调用的方法是寻找一个clientid和“其他”。那是一类。这令人费解。如果可以,我可以在下面的文章中发表,但我感到困惑。
mappingman

45

在Visual Studio中。

  • 创建或打开一个项目。
  • 在解决方案资源管理器中右键单击项目。
  • 选择“添加服务引用”
  • 用您收到的WSDL粘贴地址。
  • 单击确定。

如果没有错误,您应该能够在对象浏览器和所有相关方法中查看服务引用。


9
<3 Visual Studio ..是的,就这么简单:)
cwap

3
OP没有地址,但有文件。
亨克·霍尔特曼

1
Web服务的提供者可能已禁用WSDL(默默无闻的安全性),因此没有可访问WSDL的URL,因此无法在VS中添加Web引用。但是,提供者确实希望您(我的意思是OP)知道您需要了解的有关服务合同的所有信息,这就是为什么他们发送了WSDL文件。现在,OP需要从中生成代理代码,问题是如何。
azheglov

3
通过输入文件的路径。是什么让您认为这不起作用?
约翰·桑德斯

1
嗨@vidalsasoon。您能否简要解释一下如何使用在类浏览器中看到的这些类。?
CalZone

16

使用WSDL.EXE实用程序从WSDL生成Web服务代理。

您将获得一个长的C#源文件,其中包含如下所示的类:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="MyService", Namespace="http://myservice.com/myservice")]
public partial class MyService : System.Web.Services.Protocols.SoapHttpClientProtocol {
    ...
}

在客户端的Web服务消耗代码中:

  1. 实例化MyService。
  2. 设置其网址属性
  3. 调用Web方法

5
这将创建一种“旧式” ASMX Web服务-这些服务已过时-现在应该使用WCF代替
marc_s 2009年

7

如果要在.Net Core 项目中添加wsdl参考,则没有“添加Web参考”选项。

要添加wsdl引用,请转到解决方案资源管理器,右键单击“引用”项目项,然后单击“ 添加连接的服务”选项

在此处输入图片说明

然后单击“ Microsoft WCF Web服务参考”:

在此处输入图片说明

在URI文本框中输入文件路径,然后导入WSDL:

在此处输入图片说明

它将生成一个简单的,非常基本的WCF客户端,您可以使用以下方式:

YourServiceClient client = new YourServiceClient();
client.DoSomething();
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.