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

时间:2009-12-01 16:17:36

标签: c# unit-testing web-services wsdl

问候,     我想编写一个单元测试,以确保我们的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服务器发出请求(在运行单元测试时可能会运行甚至不运行)。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

检索WSDL。

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

可以在http://wsdlgenerator.codeplex.com

找到下载和源代码

欢迎任何提示和提示!

- 燕姿