我正在尝试为支持.Net CompactFramework 3.5的扫描程序上运行的Windows CE设备创建一个小应用程序。 我遇到的问题是,我必须连接到具有多个IP地址的Web服务。在默认的.Net Framework中,我可以将使用wsdl.exe创建的WebReference的属性URL-Behavior更改为“Dynamic”,然后我应该能够引用配置文件中定义的IP地址。 但在CompactFramework中却不是这样。 我已将属性已更改为动态修改WebReference的构造函数为:
public partial class WS_SCAN_WSDL : System.Web.Services.Protocols.SoapHttpClientProtocol {
public WS_SCAN_WSDL(String ls_webserviceLocation) {
this.Url = ls_webserviceLocation+"/WS_SCAN_WSDL";
}
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://192.1.2.4:8085/MYSCAN/WS_SCAN/SearchItems", RequestNamespace = "http://192.1.2.4:8085/MYSCAN/WS_SCAN", ResponseNamespace = "http://192.1.2.4:8085/MYSCAN/WS_SCAN", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public System.Data.DataSet SearchItems([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string iXMLString, out int sqlcode) {
object[] results = this.Invoke("SearchItems", new object[] {
iXMLString});
sqlcode = ((int)(results[1]));
return ((System.Data.DataSet)(results[0]));
}
[...]
}
现在调用webservice时:
WS_SCAN_WSDL lsrv_myService = new WS_SCAN_WSDL("http://192.1.2.4:8085/MYSCAN");
一切正常。如果我将它称为:
WS_SCAN_WSDL lsrv_myService = new WS_SCAN_WSDL("http://194.3.1.6:8082/MYSCAN");
什么都行不通。 WebService可以在两个Locations上使用,但第二个调用会引发WebException,我无法继续。
是否有可能为.Net CompactFramework创建动态WebService代理?
//编辑: 也许我已经解决了主要问题,但我不确定是否如此。 Web服务描述如下:
<definitions name="MY_SCAN_WSDL" targetNamespace="http://192.1.2.4:8085/MYSCAN">
<types>
[...]
和其他Webservice描述说:
<definitions name="MY_SCAN_WSDL" targetNamespace="http://194.3.1.6:8082/MYSCAN">
<types>
[...]
问题是否可能由不同的命名空间引起?两个Web服务是否可能在不同的IP上具有相同的命名空间?或者可以在运行时更改此内容吗?