客户端为我提供了生成Web服务的wsdl。但是当我使用wsdl.exe命令时,它生成了.cs类。我在我的Web服务中使用了该类,当我向客户端提供wsdl时,它与它们的模式不匹配。实际上我希望从wsdl自动生成.asmx,以便我可以填写web方法。这样它就会完全匹配他们的架构。 希望它有意义。
答案 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 /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服务。这是目前更现代,更灵活的方式!
马克
更新:
当我在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:
转到目录: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);
}
步骤2
创建新的“ Web服务项目”
第3步
添加-> 网络服务
第4步
从 myFile.cs (上面生成的)复制所有代码,但“使用类” 除外 例如:
public class WebService2 : ICalculoterServiceSoap
第4步
将其粘贴到上面在步骤2中创建的 webService.asmx.cs (在命名空间内部)
第5步
使用您的Web服务类继承接口类 例如:
for