【问题标题】:C# Web Reference - Error with Dynamic URLC# Web 参考 - 动态 URL 错误
【发布时间】:2013-09-23 09:27:01
【问题描述】:

我正在编写一个使用 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 时,只要调用了服务方法(这里是身份验证)就会抛出异常:

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 属性是动态的,它可能是相关的吗?

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    看看这篇文章: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 网络引用无法处理它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      相关资源
      最近更新 更多