我对.Net中的网络服务比较陌生,所以如果这是一个新手问题我会道歉。
我已经找到了很多关于如何在.Net项目中实现Web服务的资源,但是所有这些资源似乎都涉及暴露方法的静态定义。虽然这可能适用于某些应用程序,但它不适合我需要的费用。
我想知道的是,有没有办法动态实现WSDL中公开的方法,比如PHP SoapClient的方式呢?
答案 0 :(得分:7)
WSDL实际上只是为了帮助定义方法名称和参数,并为您(开发人员)屏蔽所有HTTP头。
听起来你想在运行时提供方法名称和参数。也许解决这个问题的方法是完全忘记WSDL。进行自己的HTTP调用。
将您期望的方法和SOAP端点URL存储在.config
中。在运行时,查找并遍历Web方法的参数列表,并提供值。
使用HttpWebRequest
并根据需要添加标头。这是一个article doing the same thing - Invoking Web Service dynamically using HttpWebRequest。
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包装器类所示。希望你能维持下来不会太费力。