如何从wsdl生成Web服务

ali*_*ce7 43 c# wsdl asmx

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

p.c*_*ell 71

不幸的是,没有一个神奇的子弹解决方案可以满足您的需求.这是你可以做的:

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

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

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

  • .asmx.csCode-View的文件中,修改您的类:

 

 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";
     }
 }
Run Code Online (Sandbox Code Playgroud)

  • 您也可以输入/输出:"path\to\folder"将生成的代码放在某个位置. (3认同)
  • 命令`wsdl.exe C:Folder\File.wsdl /l:CS /ServerInterface /out:C:Folder` 为我做了这件事。对于所有在命令提示符中无法识别 `wsdl.exe` 的用户:您可以在 `VS 2017 的开发人员命令提示符`中使用它(安装 VS17 时可以在 start 下找到) (2认同)

mar*_*c_s 4

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

- ADVANCED -
Run Code Online (Sandbox Code Playgroud)

/服务器

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.
Run Code Online (Sandbox Code Playgroud)

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

马克


更新:

当我使用wsdl /serverWSDL 文件时,我会创建以下文件:

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

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

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

<%@ WebService Language="C#" CodeBehind="YourService.asmx.cs" 
      Class="YourServiceNamespace.YourServiceClass" %>
Run Code Online (Sandbox Code Playgroud)