【问题标题】:Calling WCF service over node proxy works on localhost only通过节点代理调用 WCF 服务仅适用于 localhost
【发布时间】:2015-08-28 17:49:46
【问题描述】:

我正在尝试调用另一个域上的 WCF 数据服务。该服务使用 NTLM,返回的 JSON 取决于经过身份验证的用户。我正在使用node-http-proxy 来解决跨域问题。 服务,让我们说

http://otherdomain:1234/dataservice.svc/getData

返回一个类似 JSON 的

    {
        "description": "xxxxx",   
        "data": {
            "subclass": [
                [
                    {
                        "name": "xxxxx",
                        "keys": {     
                        },
                        "children": "xx"
                    }
                ]
            ]
        },
        "parameter": "someparam",
        "option": {
              "someoption": []
            }
     }

对于没有配置数据的用户,它只返回一个空的 JSON 骨架,如

    {
        "description": "",   
        "data": {},
        "parameter": "",
        "option": {}
     }

在我的代理服务器中,我将target 设置为http://otherdomain:1234 并将服务调用为

http://localhost:8003/dataservice.svc/getData

来自我的客户端应用程序。这工作得很好(直接来自应用程序和浏览器)。 NTLM 身份验证正在工作;没有CORS问题。我像第一个例子一样得到 JSON。

但是当我使用我的 IP 地址调用代理时,就像这样

http://10.203.147.21:8003/dataservice.svc/getData

我只得到空的 JSON 骨架,没有其他错误。这里发生了什么?使用 localhost 但不是 IP。

有趣的是,实际服务也会发生这种情况;即,如果我使用数据服务器的 IP 地址(直接从浏览器调用)而不是名称,我会得到一个类似的空 JSON。

http://10.203.147.34:1234/dataservice.svc/getData

有人能解释一下这里发生了什么吗?如何解决?

【问题讨论】:

    标签: node.js proxy wcf-data-services ntlm node-http-proxy


    【解决方案1】:

    httpProxyoptions 对象中将changeOrigin 设置为true 已解决此问题。现在代理能够正确协商来自不同域的 NTLM。 猜测服务器正在为来自不同来源的请求返回空响应。

    【讨论】:

      猜你喜欢
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 2017-10-24
      • 1970-01-01
      相关资源
      最近更新 更多