【问题标题】:Issue with Incorrect URLs in the WSDL of a .NET Web Service.NET Web 服务的 WSDL 中的 URL 不正确的问题
【发布时间】:2010-10-30 00:08:35
【问题描述】:

我们在客户的服务器上安装了一个 ASP.NET 网站。该站点有一个 Web 服务,其中包含几个由 Flash 对象调用以显示新闻提要的 Web 方法。如果您浏览到他们的网站(例如:www.domain.com),一切正常,除了 flash。

问题在于,当我们浏览到 .asmx 时,标头显示主机是其网络内部的子域 (internal.domain.com)。显然,当从网络外部浏览时,这不会解析为任何公共 IP。这会导致 Flash 失败,因为 Flash 对象嵌入在页面中,因此正在客户端运行。

我检查了有问题的服务器上的计算机名称,它甚至与“internal.domain.com”不匹配 - 这是完全不同的东西。它从哪里得到这些信息。它不是来自 IIS,因为我们没有设置主机头,并且站点的 IP 设置为(全部未分配)。

我们要么需要强制 Web 服务针对特定主机运行,要么需要更改服务器上的某些内容,以便它解析为有效的面向公众的主机名。非常感谢任何和所有帮助!!!!

【问题讨论】:

  • 这是 WCF svc 文件还是纯 asmx 服务?
  • 我实际上并不完全确定,因为我不是最初将 Web 服务添加到项目中的人。会有什么不同?我只知道网站根目录的 WebServices 文件夹中有一个 .asmx 文件,而代码隐藏 (.cs) 文件位于 App_Code 目录中。这就是它的全部内容。
  • 我们发现我们的客户端正在使用反向代理来处理他们的网络/网络流量,因此通过的主机标头与实际的 url/主机名不匹配。他们无法解决这个问题,所以我们不得不删除调用 Web 服务的 flash 部分。

标签: web-services iis asmx


【解决方案1】:

虽然您可能已经这样做了,但这始终是一个很好的第一步:

在 Flash 对象和 Web 服务的源代码中对相关字符串进行全局查找。

听起来有人可能已将 internal.domain.com 字符串配置/编码到 Flash 对象的请求中。 (主机:是 HTTP 请求标头,而不是响应标头,IIRC。)

【讨论】:

  • 感谢您的回答,但这不是闪存的问题,而是网络服务本身的问题。如果您在浏览器中直接浏览到 .asmx 文件,然后单击任一 Web 方法,然后检查 SOAP 标头,您会看到“Host: internal.domain.com”。而且我确实在整个解决方案中搜索了 internal.domain.com(并且知道不会返回任何结果,因为我们显然甚至不知道 internal.domain.com 存在)。这个主机名必须来自机器本身,但是在哪里?
【解决方案2】:

Flash 对象是否从 C# 代码中获取 Web 服务 URL?如果是这样,它可能会获取您在 VS 中向项目添加 Web 引用时选择的默认 Web 服务 URL。因此,它可能指向开发人员机器/服务器的本地 URL,而该 URL 在实时服务器上无法识别。

【讨论】:

  • 再一次,这是在我们的开发盒上开发的,我们的开发盒不知道 internal.domain.com 是什么,所以它永远不可能被默认。不知何故,我们客户端服务器上的主机名解析为 internal.domain.com 而不是 www.domain.com。我通过 IIS 和计算机名称字段(我的计算机 -> 属性 -> 计算机名称)进行了检查,没有任何地方提到/引用 internal.domain.com。
【解决方案3】:

解决方法是为 www.domain.com 添加一个主机头

More details here

【讨论】:

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