Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从wsdl生成web服务_C#_Wsdl_Asmx - Fatal编程技术网

C# 如何从wsdl生成web服务

C# 如何从wsdl生成web服务,c#,wsdl,asmx,C#,Wsdl,Asmx,客户机为我提供了生成web服务的wsdl。但当我使用wsdl.exe命令时,它从中生成了.cs类。我在web服务中使用了该类,当我向客户机提供wsdl时,它与他们的模式不匹配。实际上,我希望从wsdl自动生成.asmx,以便填写web方法。这样它将与他们的模式完全匹配。 希望有意义。使用wsdl/server或wsdl/serverinterface开关如何? 据我所知,wsdl.exe命令行属性正是您所需要的 - ADVANCED - /server Server switch has be

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

使用
wsdl/server
wsdl/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服务呢。这是当前更现代、更灵活的方法

马克


更新:

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.
当我在wsdl文件上使用
wsdl/server
时,我会创建以下文件:

[WebService(Namespace="http://.......")]
public abstract partial class OneCrmServiceType : System.Web.Services.WebService 
{
    /// <remarks/>
    [WebMethod]
    public abstract void OrderCreated(......);
}
[WebService(命名空间=”http://.......")]
公共抽象部分类OneCrmServiceType:System.Web.Services.WebService
{
/// 
[网络方法]
创建的公共摘要无效订单(……);
}
这基本上与向解决方案添加ASMX文件时生成的代码完全相同(在代码隐藏文件-“yourservice.ASMX.cs”中)。我认为您无法更接近于从WSDL文件创建ASMX文件

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

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

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

在您的场景中,您应该将WSDL文件放在web站点的某个位置,并让消费者使用该URL。您应该在web.config中禁用
文档
协议,以便“?wsdl”不会返回wsdl。看

此外,请注意该条第一款:

此主题特定于传统技术。现在应使用创建XML Web服务和XML Web服务客户端。


不幸的是,对于你正在寻找的东西,没有一个灵丹妙药解决方案。以下是您可以做的:

  • 在Visual Studio命令提示符窗口中使用以下命令创建接口类:

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

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

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

  • 在代码视图中的
    .asmx.cs
    文件中,修改类如下:


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

回答这个问题可能已经很晚了。但可能对有需要的人有帮助: 如何将WSDL转换为SVC:

  • 假设您在位置“E:\”处有.wsdl文件,以便进一步访问
  • 为每个.wsdl文件准备以下命令:E:\YourServiceFileName.wsdl
  • 权限:假设您具有执行权限的管理权限。打开目录:C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\bin
  • 右键单击amd64=>Security=>Edit=>Add User=>Everyone或Current User=>Allow all permissions=>OK
  • 在文本编辑器中为每个文件准备以下命令:wsdl.exe E:\YourServiceFileName.wsdl/l:CS/server
  • 现在从以下位置打开Visual studio命令提示符:C:\Program Files(x86)\Microsoft Visual studio 12.0\Common7\Tools\Shortcuts\VS2013 x64本机工具命令提示符
  • 执行上面的命令
  • 转到目录:C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\bin\amd64,应在其中生成相应的.CS文件

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

  • 第一步

    步骤2

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

    创建新的“Web服务项目”

    步骤3

    添加->web服务

    步骤4

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


    不,这不是我真正想要的。它会生成我不想要的代理类。我想自动生成abc.asmx。我想使用WCF,但通过创建web服务变得简单。我实际上也尝试了wsdl.exe/server或/serverinterface,它仍在生成.cs类。我也要注意这一点,尽管我从来没有这样做过我自己很幸运(特别是WSCF蓝色)。也许我使用了早期版本或其他什么。你也可以放/出:“path\to\folder”将生成的代码放在某个位置。命令
    wsdl.exe C:Folder\File.wsdl/l:CS/ServerInterface/out:C:Folder
    为我做了这件事。对于所有在命令提示符下无法识别
    wsdl.exe
    的人:您可以在VS2017的
    开发者命令提示符下使用它(安装VS17时在start下找到)这是vs cmd窗口中最简单、最直接的方法。
    
    WSDL.exe  /OUT:myFile.cs WSDLURL  /Language:CS /serverInterface
    
     /// <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);
    }
    
    public class WebService2 : ICalculoterServiceSoap