C# Web 参考 - 动态 URL 出错
本文关键字:URL 出错 动态 Web 参考 | 更新日期: 2023-09-27 18:32:27
我正在编写一个使用 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属性是动态的,它是否相关?
谢谢!
最后,似乎
不可能做我想做的事。问题是框架解析 Web 服务响应并检查命名空间。
看看这篇文章:Web服务无法使用动态URL强制转换类型:XML文档中存在错误(2,691)
我们可以定义3种情况:
- 只有一个端点,没问题
- 端点数量有限:每个域 1 个 Web 引用。阅读这个,有趣的答案,给出了如何以编程方式管理它的好主意:https://stackoverflow.com/a/18322644/2806497
- 无限数量的端点:无法使用Visual Studio Web引用来处理它。