如何从 wsdl 生成 Web 服务

问题描述 投票:0回答:6

客户端向我提供了 wsdl 来生成 Web 服务。但是当我使用 wsdl.exe 命令时,它生成了 .cs 类。我在 Web 服务中使用了该类,当我向客户端提供 wsdl 时,它与他们的架构不匹配。实际上,我希望从 wsdl 自动生成 .asmx,以便我可以填写 Web 方法。这样它将完全匹配他们的模式。 希望它有意义。

c# wsdl asmx
6个回答
83
投票

不幸的是,对于您正在寻找的问题,没有灵丹妙药的解决方案。您可以执行以下操作:

  • 在 Visual Studio 命令提示符窗口中使用此命令创建一个 Interface 类:

    wsdl.exe yourFile.wsdl /l:CS /serverInterface

    使用 VB 或 CS 作为您选择的语言。这将创建一个新的
    .cs
    .vb
    文件。

  • 创建一个新的.NET Web 服务项目。将现有文件导入到您的项目中 - 在上述步骤中创建的文件。

  • 在代码视图中的

    .asmx.cs
    文件中,修改您的类:

 

 public class MyWebService : System.Web.Services.WebService, IMyWsdlInterface
 {    
     [WebMethod]
     public string GetSomeString()
     {
         //you'll have to write your own business logic 
         return "Hello SOAP World";
     }
 }

4
投票

使用

wsdl /server
wsdl /serverinterface
开关怎么样? 据我了解 wsdl.exe 命令行属性,这就是您正在寻找的。

- ADVANCED -

/服务器

Server switch has been deprecated. Please use /serverInterface instead.
Generate an abstract class for an xml web service implementation using
ASP.NET based on the contracts. The default is to generate client proxy
classes.

另一方面:为什么要创建过时的技术解决方案?为什么不将此 Web 服务创建为 WCF 服务。这是当前更现代、更灵活的方法!

马克


更新:

当我在 WSDL 文件上使用

wsdl /server
时,我会创建此文件:

[WebService(Namespace="http://.......")]
public abstract partial class OneCrmServiceType : System.Web.Services.WebService 
{
    /// <remarks/>
    [WebMethod]
    public abstract void OrderCreated(......);
}

这基本上与将 ASMX 文件添加到解决方案时生成的代码几乎完全相同(在文件后面的代码中 - “yourservice.asmx.cs”)。我认为您无法更接近从 WSDL 文件创建 ASMX 文件。

您始终可以手动添加“yourservice.asmx” - 它实际上包含的内容并不多:

<%@ WebService Language="C#" CodeBehind="YourService.asmx.cs" 
      Class="YourServiceNamespace.YourServiceClass" %>

4
投票

步骤1

open -> Visual Studio 2017 Developer Command Prompt

步骤 2

WSDL.exe  /OUT:myFile.cs WSDLURL  /Language:CS /serverInterface
  • /serverInterface(用于从 wsdl 文件创建接口)
  • WSDL.exe(用于从 wsdl 创建类。它随 .net 一起提供
  • /OUT:(输出文件名)

步骤2

创建新的 “Web 服务项目”

步骤3

添加 -> 网络服务

步骤 4

复制 myFile.cs(上面生成的)中的所有代码,除了 “使用类” 例如:

 /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")]
    [System.Web.Services.WebServiceBindingAttribute(Name="calculoterServiceSoap",Namespace="http://tempuri.org/")]

public interface ICalculoterServiceSoap {

    /// <remarks/>
    [System.Web.Services.WebMethodAttribute()]
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/addition", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    string addition(int firtNo, int secNo);
}

步骤 4

将其粘贴到上面第 2 步中创建的 webService.asmx.cs(在 namespace 内部)

步骤 5

用你的Web服务类继承接口类 例如:

public class WebService2 : ICalculoterServiceSoap

3
投票

您无法保证自动生成的 WSDL 与您创建服务接口的 WSDL 相匹配。

在您的场景中,您应该将 WSDL 文件放置在网站上的某个位置,并让消费者使用该 URL。您应该在 web.config 中禁用

Documentation
协议,以便“?wsdl”不会返回 WSDL。请参阅
<protocols>
元素

另外,请注意该文章的第一段:

本主题特定于遗留技术。现在应该使用 Windows Communication Foundation (WCF) 创建 XML Web 服务和 XML Web 服务客户端。


1
投票

您可以使用 thinktecture.com 的 WSCF(Web 服务契约优先)工具生成 WS 代理类。所以本质上,您可以从 wsdl 创建 Web 服务。创建 asmx,也许不是,但这很容易,不是吗?该工具完美地集成到 VS2005-8(2010/WCF 的新版本,称为 WSCF-blue)中。我用过很多次,总觉得它非常好。


1
投票

这个回答可能已经很晚了。但可能对有需要的人有帮助:

如何将 WSDL 转换为 SVC:

  1. 假设您在位置“E:”有 .wsdl 文件,以便于进一步访问。

  2. 为每个 .wsdl 文件准备命令:
    E:\YourServiceFileName.wsdl

  3. 权限:假设您拥有执行权限的管理权限。
    打开目录:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC in

  4. 右键单击 amd64 => 安全 => 编辑 => 添加用户 => 每个人或当前用户 => 允许所有权限 => 确定。

  5. 在文本编辑器中为每个文件准备命令:

    wsdl.exe E:\YourServiceFileName.wsdl /l:CS /server.  
    
  6. 现在从以下位置打开 Visual Studio 命令提示符:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts\VS2013 x64 Native Tools Command Prompt。

  7. 执行上面的命令。

  8. 转到目录:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC in md64,应在其中生成相应的.CS文件。

  9. 将生成的CS文件移动到适当的位置。

© www.soinside.com 2019 - 2024. All rights reserved.