使用 CORS 通过 IIS 访问 WCF REST 服务在本地工作,但不能从连接的设备

Posted

技术标签:

【中文标题】使用 CORS 通过 IIS 访问 WCF REST 服务在本地工作,但不能从连接的设备【英文标题】:Accessing WCF REST service through IIS using CORS works locally but not from connected device 【发布时间】:2016-01-14 09:09:33 【问题描述】:

我有一组已启用 WebInvoke 的 WCF 服务。 我想要访问它们的一种方法是通过 IIS 托管的简单网页上的 javascript。 为了让它工作,我必须启用我使用本指南管理的 CORS: http://blogs.microsoft.co.il/idof/2011/07/02/cross-origin-resource-sharing-cors-and-wcf/

但是,当我从另一台计算机通过本地网络访问网页时仍然存在问题。

举个例子:

网络 Comp1 (10.0.0.1) 和 Comp2 (10.0.0.2) 上的两台计算机。 IIS 和 WCF 服务均由 Comp1 托管。

使用 Firefox,我可以使用以下命令从 Comp1 访问网页: http://10.0.0.1:12345

只要根据上面的链接启用了 CORS,它就可以工作。如果我禁用 CORS,我会收到一条错误消息,指出 CORS 已禁用。

如果我使用 Comp2 中的 Firefox 访问 10.0.0.1:12345,无论我是否在 WCF 服务器中启用了 CORS 代码,我都会收到相同的 CORS 错误消息。如果 CORS 被禁用,我在此处收到的错误消息与我在 Comp1 上收到的错误消息相同。

有人对可能出现的问题有任何建议吗?

一切(除了 js 和 html)都在 C# 中使用 Visual Studio 2013。 请告诉我是否应该包含一些代码以获得更好的帮助。

【问题讨论】:

【参考方案1】:

确保为 IIS 中的 CORS 支持启用了自定义标头。如果不将以下设置添加到 web.config 的根目录

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>
</configuration>

有关在 server side 和 client side 上启用 cors 的更多详细信息。

附: - 您还可以签出 this 新的 WCF 休息行为扩展库,它支持启用 CORS 的行为。

【讨论】:

由于某种原因,这段代码对我来说不是必需的。 我相信它已经以不同的方式包含在我用于实施 CORS 的指南中(请参阅 OP 中的链接)。事实证明,我的问题主要与我对 javascript 的执行方式和时间的一些混淆有关,因此一些请求仅在主机上有效。似乎它根本与 CORS 无关,尽管那是我得到的错误消息。还是谢谢你,你的回答让我重新审视了我的代码中的一些东西。

以上是关于使用 CORS 通过 IIS 访问 WCF REST 服务在本地工作,但不能从连接的设备的主要内容,如果未能解决你的问题,请参考以下文章

CORS WCF:对预检请求的响应未通过访问控制

WCF引用方式之IIS方式寄宿服务

使用 IIS 将 WCF 服务从一台服务器路由到另一台服务器

无法从 IIS 访问我的 WCF [关闭]

[老老实实学WCF] 第三篇 在IIS中寄存服务

从 Windows 应用程序访问托管在 IIS 上的 WCF 服务时出现问题