如何在不发出http请求的情况下在c#中生成WSDL
问题描述:
Greetings, 我想编写一个单元测试以确保我们的Web服务没有将WSDL从最后一个已知的发布版本中更改。原因是因为对WSDL中对象的任何更改都会导致使用Apache Axis的客户端失败。即使你所做的只是添加一个不需要的属性。因此,如果发生了变化,开发人员需要提醒他们,因为产品管理需要与客户沟通有关更改的信息,以便他们可以在新WSDL发布时准备好重新编译他们的存根。如何在不发出http请求的情况下在c#中生成WSDL
所以我希望能有这样的事情:
[Test]
public void TheWSDLHasNotChanged(){
XmlDocument currentWSDL = SomeMysteryServiceIDontKnowAbout.GetWSDLForWebServiceClass(typeof(UserService));
XmlDocument existingWSDL = new XmlDocument().Load("ExistingWsdl.wsdl");
Assert.That(currentWSDL, Is.Equal.To(existingWSDL));
}
出于显而易见的原因,我不想做一个Web服务器的请求(这可能会或可能不会甚至可以运行单元测试运行时)。
答
要从程序集生成WSDL:
对于WCF,使用SvcUtil.exe。请参阅MSDN HowTo。
对于ASP.NET使用ServiceDescriptionReflector。请参阅本指南:http://craigandera.blogspot.se/2004/10/generating-wsdl-without-aspnet_18.html
对不起,我在第一个答案中误解了您的代码片段。
答
我已经创建了一个工具,它可以从包含一个或多个WebServices的已编译的c#程序集(dll)生成WSDL文件。通常情况下,您需要运行服务(IIS或其他)来托管.asmx,以便您可以使用/MyWebService.asmx?wsdl检索WSDL。
此工具使用反射来生成WSDL文件,以检索程序集中的所有信息DLL)。
下载源代码,并可以在http://wsdlgenerator.codeplex.com
任何提示和技巧,欢迎来发现!
--Stef
可能重复:http://stackoverflow.com/questions/1309861/are-there-any-tools-to-build-asmx-proxies-from-server-side-assemblies/1827650 – 2009-12-01 17:24:14