繁体   English   中英

如何在c#中生成WSDL而不发出http请求

[英]How to Generate a WSDL in c# without making a http request

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

要从程序集生成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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM