客户端向我提供了 wsdl 来生成 Web 服务。但是当我使用 wsdl.exe 命令时,它生成了 .cs 类。我在 Web 服务中使用了该类,当我向客户端提供 wsdl 时,它与他们的架构不匹配。实际上,我希望从 wsdl 自动生成 .asmx,以便我可以填写 Web 方法。这样它将完全匹配他们的模式。 希望它有意义。
不幸的是,对于您正在寻找的问题,没有灵丹妙药的解决方案。您可以执行以下操作:
在 Visual Studio 命令提示符窗口中使用此命令创建一个 Interface 类:
wsdl.exe yourFile.wsdl /l:CS /serverInterface
.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";
}
}
使用
wsdl /server
或 wsdl /serverinterface
开关怎么样?
据我了解 wsdl.exe 命令行属性,这就是您正在寻找的。
- ADVANCED -
/服务器
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" %>
步骤1
open -> Visual Studio 2017 Developer Command Prompt
步骤 2
WSDL.exe /OUT:myFile.cs WSDLURL /Language:CS /serverInterface
步骤2
创建新的 “Web 服务项目”
步骤3
添加 -> 网络服务
步骤 4
复制 myFile.cs(上面生成的)中的所有代码,除了 “使用类” 例如:
/// <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);
}
步骤 4
将其粘贴到上面第 2 步中创建的 webService.asmx.cs(在 namespace 内部)
步骤 5
用你的Web服务类继承接口类 例如:
public class WebService2 : ICalculoterServiceSoap
您无法保证自动生成的 WSDL 与您创建服务接口的 WSDL 相匹配。
在您的场景中,您应该将 WSDL 文件放置在网站上的某个位置,并让消费者使用该 URL。您应该在 web.config 中禁用
Documentation
协议,以便“?wsdl”不会返回 WSDL。请参阅 <protocols>
元素。
另外,请注意该文章的第一段:
本主题特定于遗留技术。现在应该使用 Windows Communication Foundation (WCF) 创建 XML Web 服务和 XML Web 服务客户端。
您可以使用 thinktecture.com 的 WSCF(Web 服务契约优先)工具生成 WS 代理类。所以本质上,您可以从 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 in
右键单击 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 Command Prompt。
执行上面的命令。
转到目录:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC in md64,应在其中生成相应的.CS文件。
将生成的CS文件移动到适当的位置。