我有一个ASP.NET网页,其中包含对SOAP WSDL的Web引用。如果我调用与此WSDL关联的方法(这些方法存在于另一台服务器上),一切正常。但是,我希望能够动态更改WSDL指向的端点地址。原因是我们为不同的组托管了同一组Web服务,我们希望跟踪谁在使用Web服务。因此,每个集合都有自己的URL。
我尝试将soap客户端对象上的“Url”属性更改为其他端点,但是当我这样做时,方法会返回此错误:
客户发现“text / plain”的响应内容类型,但预期为“text / xml”
我认为Url属性会让代理类感到困惑,认为我现在正在使用REST Web服务?
以下是我的一些代码:
mySoapNamespace.mySoapClient soapClient = new mySoapNamespace.mySoapClient();
//next I try to change the endpoint URL of the WSDL, misguided? ...
soapClient.Url = "http://a_different_url/my_soap_server.wsdl";
string result = soapClient.myTestMethod();
Response.Write(result);
这就是我得到错误的地方。有没有人知道修改或动态更改SOAP调用端点的不同方法?
答案 0 :(得分:1)
好!我弄清楚我做错了什么。当我更改Web引用的Url属性时,我需要指定代码端点(WSDL的wsdl:port部分中的soap:address)。我正在指定WSDL本身:
soapClient.Url =“http://a_different_url/my_soap_server.wsdl”;
......真的,我应该引用它背后的PHP脚本。
soapClient.Url =“http://a_different_url/my_soap_server.php”;
通过查看web.config文件,我可以清楚地看到代理类将我的Url设置为什么(当我导入WSDL时)。它有一个列出URL的appSettings部分。我注意到它指向了代码文件,而不是远程服务器上的WSDL。