C# 如何从wsdl生成web服务
客户机为我提供了生成web服务的wsdl。但当我使用wsdl.exe命令时,它从中生成了.cs类。我在web服务中使用了该类,当我向客户机提供wsdl时,它与他们的模式不匹配。实际上,我希望从wsdl自动生成.asmx,以便填写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
希望有意义。使用
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:
WSDL.exe /OUT:myFile.cs WSDLURL /Language:CS /serverInterface
- /serverInterface(用于从wsdl文件创建接口)
- WSDL.exe(此选项用于从WSDL创建类。此选项随.net一起提供
- /输出:(输出文件名)
不,这不是我真正想要的。它会生成我不想要的代理类。我想自动生成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