C#Web引用 - 动态URL出错

时间:2013-09-23 09:27:01

标签: c# web-services soap web-reference

我正在编写一个使用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属性是动态的,它是否可以相关?

谢谢!

1 个答案:

答案 0 :(得分:0)

最后似乎不可能做我想做的事。问题是框​​架解析webservice响应并检查命名空间。

看一下这篇文章:Webservice fails to cast type using dynamic URL: There is an error in XML document (2, 691)

我们可以定义3个案例:

  1. 只有一个端点,没问题
  2. 有限数量的端点:每个域1个Web引用。阅读这个有趣的答案,可以很好地了解如何以编程方式管理:https://stackoverflow.com/a/18322644/2806497
  3. 无限数量的端点:无法使用visual studio webreferences处理它。