C#中的动态WSDL实现

时间:2010-08-31 00:15:58

标签: .net web-services soap wsdl

我对.Net中的网络服务比较陌生,所以如果这是一个新手问题我会道歉。

我已经找到了很多关于如何在.Net项目中实现Web服务的资源,但是所有这些资源似乎都涉及暴露方法的静态定义。虽然这可能适用于某些应用程序,但它不适合我需要的费用。

我想知道的是,有没有办法动态实现WSDL中公开的方法,比如PHP SoapClient的方式呢?

1 个答案:

答案 0 :(得分:7)

WSDL实际上只是为了帮助定义方法名称和参数,并为您(开发人员)屏蔽所有HTTP头。

听起来你想在运行时提供方法名称和参数。也许解决这个问题的方法是完全忘记WSDL。进行自己的HTTP调用。

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(
      "http://foo.com/Some.asmx"); //build string from .config instead.

//here Register is the name of the method. take yours from config as well if needed
req.Headers.Add("SOAPAction", "\"http://tempuri.org/Register\"");

req.ContentType = "text/xml;charset=\"utf-8\"";
req.Accept = "text/xml";
req.Method = "POST";

有关详细信息,请参阅文章Invoking Web Service dynamically using HttpWebRequest

关于.NET的Web服务包装器类的一般情况是,他们试图帮助强制服务器contracts与客户端。显然,您正试图避免更改静态类型的客户端,如.NET包装器类所示。希望你能维持下来不会太费力。