如何在不发出http请求的情况下在c#中生成WSDL

问候,我想写一个unit testing,以确保我们的Web服务没有更改上一个已知发布版本的WSDL。 原因是因为对WSDL中对象的任何更改都将导致使用Apache Axis的客户端失败。 即使您所做的只是添加一个不需要的属性。 因此,如果存在更改,则需要提醒开发人员,因为产品管理需要向客户端传达有关更改的信息,以便他们可以在发布新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服务器发出请求(在运行unit testing时可能会运行甚至不运行)。

要从程序集生成WSDL:
对于WCF使用SvcUtil.exe。 请参阅此MSDN HowTo 。
对于ASP.NET,请使用ServiceDescriptionReflector。 请参阅此指南: http : //craigandera.blogspot.se/2004/10/generating-wsdl-without-aspnet_18.html

抱歉,我在第一个回答中误解了您的代码段。

我创建了一个工具,可以从包含一个或多个WebServices的已编译c#assembly(dll)生成WSDL文件。 通常,您需要一个运行服务(IIS或其他)来托管.asmx,以便您可以使用/MyWebService.asmx?wsdl检索WSDL

此工具使用reflection生成WSDL文件以从程序集(dll)检索所有信息。

可以在http://wsdlgenerator.codeplex.com上找到下载和源代码

欢迎任何提示和技巧!

–Stef