我正在编写一个使用 SOAP 服务来发送数据的应用程序。用户可以在应用程序设置中更改 url 端点。
这就是我所做的:
public HubHandler()
{
this.urlHub = Settings.Default.UrlWebService;
//some code
this.connect();
}
private void connect()
{
this.service = new HubService();
this.service.Proxy = System.Net.HttpWebRequest.GetSystemWebProxy();
this.service.Proxy.Credentials = CredentialCache.DefaultCredentials;
this.service.Url = this.urlHub;
}
实际上,我只是更改了服务的 Url 属性,从我阅读的内容来看,它必须足以做我想做的事。
当用户配置的 url 与我在 web 参考属性中默认设置的 url 相同时,一切正常。但是当用户输入自己的 URL 时,只要调用服务方法就会抛出异常(这里是身份验证):
Unable to cast object of type 'System.Xml.XmlNode[]' to type 'HubServiceAuthenticateOut'
和
There is an error in XML document (2, 649)
我使用 Wireshark 捕获数据包并比较了两种情况:内容完全相同,只是名称空间随 url 变化。XML 是完全正确的(服务器端,它是一个带有 zend soap 自动发现的 php 应用程序,它生成 wsdl 并处理调用)。
有没有人已经遇到过这种问题?有没有比 url 属性更好的方法来更改服务端点?
当我查看我的 Reference.cs 时,我看到了硬编码的命名空间,如下所示:
[System.Web.Services.WebServiceBindingAttribute(Name="HubServiceBinding", Namespace="https://localhost/myapp/HubService.php")]
即使 url 属性是动态的,它可能是相关的吗?
谢谢 !