如何从wsdl生成Web服务

时间:2009-09-08 16:27:26

标签: c# wsdl asmx

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

6 个答案:

答案 0 :(得分:67)

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

  • 在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 :(得分:4)

如何使用wsdl /serverwsdl /serverinterface开关? 据我了解wsdl.exe命令行属性,这就是你要找的东西。

- 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服务。这是目前更现代,更灵活的方式!

马克


更新:

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

答案 2 :(得分:3)

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

在您的方案中,您应该将WSDL文件放在您的网站上,让消费者使用该URL。您应该禁用web.config中的Documentation协议,以便“?wsdl”不返回WSDL。请参阅<protocols> Element

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

  

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

  1. 假设您在位置“E:\”处有.wsdl文件,以便于进一步访问。
  2. 为每个.wsdl文件准备以下命令:E:\ YourServiceFileName.wsdl
  3. 权限:假设您具有执行权限的管理权限。打开目录:C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ bin
  4. 右键单击amd64 =&gt;安全性=&gt;编辑=&gt;添加用户=&gt;每个人或当前用户=&gt;允许所有权限=&gt;好。
  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文件移动到适当的位置。

答案 5 :(得分:0)

步骤1

WSDL.exe  /OUT:myFile.cs WSDLURL  /Language:CS /serverInterface

步骤2

 /// <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);
}
  • / serverInterface(用于从wsdl文件创建接口)
  • WSDL.exe(用于从wsdl创建类。.net随附
  • / OUT :(输出文件名)

步骤2

创建新的“ Web服务项目”

第3步

添加-> 网络服务

第4步

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

public class WebService2 : ICalculoterServiceSoap

第4步

将其粘贴到上面在步骤2中创建的 webService.asmx.cs (在命名空间内部)

第5步

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

for