我正在尝试为在支持 .Net CompactFramework 3.5 的扫描仪上运行的 Windows CE 设备创建一个小型应用程序。我遇到的问题是,我必须连接到具有多个 IP 地址的 Web 服务。在默认的 .Net 框架上,我可以将使用 wsdl.exe 创建的 WebReference 的属性 URL-Behaviour 更改为“动态”,然后我应该能够引用配置文件中定义的 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]));
}
[...]
}
现在当调用 web 服务时:
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 在两个位置都可用,但第二次调用会引发 WebException,我无法继续。
是否有可能为 .Net CompactFramework 创建动态 WebService 代理?
//编辑:也许我已经本地化了主要问题,但我不确定是否是这样。Webservice 描述如下:
<definitions name="MY_SCAN_WSDL" targetNamespace="http://192.1.2.4:8085/MYSCAN">
<types>
[...]
另一个 Webservice-description 说:
<definitions name="MY_SCAN_WSDL" targetNamespace="http://194.3.1.6:8082/MYSCAN">
<types>
[...]
问题是否可能是在不同的命名空间上引起的?两个 Web 服务是否有可能在不同的 IP 上具有相同的命名空间?或者是否可以在运行时更改它?