首页 文章

如何从wsdl生成Web服务

提问于
浏览
39

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

5 回答

  • 4

    您无法保证自动生成的WSDL将与您从中创建服务接口的WSDL匹配 .

    在您的场景中,您应该将WSDL文件放在您的网站上,让消费者使用该URL . 您应该在web.config中禁用 Documentation 协议,以便"?wsdl"不返回WSDL . 见<protocols> Element .

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

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

  • 1

    这可能是很晚才回答 . 但可能对有需要的人有所帮助: How to convert WSDL to SVC :

    • 假设您在位置"E:"处有.wsdl文件,以便于进一步访问 .

    • 为每个.wsdl文件准备以下命令:E:\ YourServiceFileName.wsdl

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

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

    • 在文本编辑器中为每个文件准备命令:wsdl.exe E:\ YourServiceFileName.wsdl / l:CS / server .

    • 现在从以下位置打开Visual Studio命令提示符:C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ Tools \ Shortcuts \ VS2013 x64 Native Tools命令提示符 .

    • 执行上述命令 .

    • 转到目录:C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ bin \ amd64,应该生成相应的.CS文件 .

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

  • 66

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

    • 在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";
         }
     }
    
  • 1

    如何使用 wsdl /serverwsdl /serverinterface 开关?据我了解wsdl.exe命令行属性,'s what you'正在寻找 .

    - ADVANCED -
    

    /server

    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服务 . 这是当前和更现代,更灵活的方式来做到这一点!


    UPDATE:

    当我在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" %>
    
  • 3

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

相关问题