【问题标题】:how to generate web service out of wsdl如何从 wsdl 生成 Web 服务
【发布时间】:2010-11-26 13:35:51
【问题描述】:

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

【问题讨论】:

  • 其实我也试过 wsdl.exe /server 或 /serverinterface 它仍在生成 .cs 类。

标签: c# wsdl asmx


【解决方案1】:

如何使用wsdl /serverwsdl /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" %>

【讨论】:

  • 不,这实际上不是我要找的。它会生成我不想要的代理类。我想自动生成 abc.asmx。我想到了 WCF,但通过制作变得简单网络服务。
【解决方案2】:

您不能保证自动生成的 WSDL 将与您从中创建服务接口的 WSDL 匹配。

在您的场景中,您应该将 WSDL 文件放在您网站上的某个位置,并让消费者使用该 URL。您应该在 web.config 中禁用Documentation 协议,这样“?wsdl”就不会返回 WSDL。见&lt;protocols&gt; Element

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

本主题专门针对旧技术。现在应该使用Windows Communication Foundation (WCF) 创建 XML Web 服务和 XML Web 服务客户端。

【讨论】:

    【解决方案3】:

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

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

      wsdl.exe yourFile.wsdl /l:CS /serverInterface
      使用 VB 或 CS 作为您选择的语言。这将创建一个新的 .cs.vb 文件。

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

    • 在 Code-View 的 .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";
         }
     }
    

    【讨论】:

    • 也可以put /out:"path\to\folder" 将生成的代码放到某个位置。
    • 命令wsdl.exe C:Folder\File.wsdl /l:CS /ServerInterface /out:C:Folder 为我做了。对于所有在命令提示符下无法识别wsdl.exe 的人:您可以在Developer Command Prompt for VS 2017 中使用它(安装VS17 时在开始下找到)
    【解决方案4】:

    您可以使用 thinktecture.com 上的 WSCF(Web Services Contract First)工具生成 WS 代理类。所以本质上,您可以从 wsdl 中创建 web 服务。创建 asmx,也许不是,但这很容易,不是吗?该工具完美地集成到 VS2005-8(2010/WCF 的新版本,称为 WSCF-blue)。我已经使用它加载并且总是发现它非常好。

    【讨论】:

    • 我也会注意到这一点,尽管我自己从来没有这么幸运(尤其是 WSCF Blue)。也许我使用了早期版本或其他东西。
    【解决方案5】:

    这可能回答得太晚了。但可能对有需要的人有帮助: 如何将 WSDL 转换为 SVC:

    1. 假设您的 .wsdl 文件位于“E:\”位置,以便于进一步访问。
    2. 将每个 .wsdl 文件的命令准备为:E:\YourServiceFileName.wsdl
    3. 权限:假设您拥有执行权限的管理权限。打开目录:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
    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 命令提示符。
    7. 执行上述命令。
    8. 转到目录:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64,应在其中生成相应的 .CS 文件。

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

    【讨论】:

    • 这是 vs cmd 窗口中最简单直接的方法。
    【解决方案6】:

    第一步

    open -> Visual Studio 2017 Developer Command Prompt
    

    第二步

    WSDL.exe  /OUT:myFile.cs WSDLURL  /Language:CS /serverInterface
    
    • /serverInterface(用于从 wsdl 文件创建接口)
    • WSDL.exe(这个用来从wsdl创建类。这个是.net自带的
    • /OUT:(输出文件名)

    第二步

    新建“Web 服务项目”

    第三步

    添加 -> 网络服务

    第四步

    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);
    }
    

    第四步

    将其粘贴到上面在步骤 2 中创建的 webService.asmx.csnamespace 内部)

    第五步

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

    public class WebService2 : ICalculoterServiceSoap
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 2015-09-09
      • 1970-01-01
      相关资源
      最近更新 更多