gpt4 book ai didi

wcf - 使用 jQuery/Ajax 从 JavaScript 调用 WCF/JSON/REST WebService

转载 作者:行者123 更新时间:2023-12-03 22:27:41 25 4
gpt4 key购买 nike

我知道有很多关于此的问题 - 相信我,我已经阅读了很多问题并尝试了答案。

(该项目适用于公司内部局域网,而不是互联网)

我们有一个 WCF Web 服务,它是 RESTFUL 并发送/接收 JSON,它需要 NTLM(Kerb 也很好)身份验证/凭据来确保调用用户(来自浏览器的用户是他们所说的人),并且这个通过 WCF 绑定(bind)在浏览器/客户端和服务之间进行协商:

 <bindings>
<webHttpBinding>
<binding name="webHttpBindingAuth">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm"/>
</security>
</binding>
</webHttpBinding>
</bindings>

使用 Fiddler,我可以成功调用服务 GET 和 POST 上的方法,并且只要我调整我们发送到 Web 服务的 JSON(例如包含 session ID),它就会愉快地运行。

当我们尝试使用 JavaScript/jQuery 调用 Web 服务时,问题就开始了;这个想法是,Web 服务器将向客户端浏览器提供 HTML/JS,然后浏览器应该调用 WCF Web 服务来获取 session 并允许用户执行一些操作(我们总共有 3 个方法)。

首先,我们遇到了 X-Domain 问题,我们尝试通过让网络服务器返回正确的 header (Access-Control-Allow-Origin) 来解决该问题。这并没有阻止像 SRIron 这样的浏览器告诉我们这一点;

XMLHttpRequest cannot load http://{webServiceUri}/InstantMessagingService/chat/start/{username}. Origin http://{web**Server**Uri} is not allowed by Access-Control-Allow-Origin.

接下来,我研究了使用 Silverlight 的可能性(似乎不支持通过 WebHttpBinding 进行 NTLM 身份验证),反向代理已经过时了,因为在开发中使用的 IIS 服务器不会在生产中使用(我 相信它是WebSphere,但不在我们的控制之下);接下来我看了这个:

http://msmvps.com/blogs/paulomorgado/archive/2007/04/27/wcf-building-an-http-user-agent-message-inspector.aspx

这给我留下了这样的印象:WCF Web 服务实际上需要告诉浏览器允许从哪里调用它(如果这有意义的话)。实现了示例中的所有代码后,我发现从未调用 ApplyClientBehavior 来尝试将 header 返回给客户端(也在 Fiddler 中监视这一点)。更多的谷歌搜索让我发现:

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/707aa031-f4ff-47ab-ba5b-730f7930605e/

由于我们使用 jQuery 访问 Web 服务,而不是使用某些 .NET 客户端/服务引用/代理/应用程序.. 等等,我认为不可能预先请求发送这些 header 以允许访问服务。此外,Fiddler 似乎认为当它尝试调用 http://../chat/start/ 时,它会收到 401 Unauthorized 错误。 ..方法。

这是我用来尝试进行调用的 jQuery(我提供了一些设置,希望它能够正常工作):

var url = webserviceUrl + "chat/start/" + remoteUserUri;

$.ajax({
type: 'GET',
url: url,
crossDomain: true,
beforeSend: function(xhr){ xhr.withCredentials = true; },
contentType: "application/json; charset=utf-8",
success: function (data) { conversationStarted(data); },
dataType: 'json'
});

好的,如果有人有有用的提示或想法,请走开。我会回复和编辑等,以确保这是最新的,我希望我没有错过任何东西(但我的头因谷歌搜索而有点旋转)。

另外,我知道可能有更好的方法来做到这一点,但我想从我现在所在的位置以最干净/最快的方式来做到这一点 - 即没有太多的代码更改、重写等。我可以如果人们认为配置确实有用,也可以发布配置。

最佳答案

最后我不得不解决这个问题,我们让负责 Web 服务器的人同意提供一个 IFrame,它指向我们的 IIS 托管页面(包含 JS 等的页面)

然后,利用 WCF/Windows 的魔力,我们在端口 80 上托管 WCF 服务,该服务绕过了 X-Domain 原始内容。这样我就可以拥有 REST/JSON,而不必使用 JSONP。

我知道根据我指定的标准,这不是问题的答案,但我认为我最终完全没有选择。

关于wcf - 使用 jQuery/Ajax 从 JavaScript 调用 WCF/JSON/REST WebService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6204563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com