djo*_*of2 10 wcf cross-domain cors iis-express visual-studio-2012
我正在编写WCF服务,这些服务将被客户端使用,因此他们需要处理跨源请求.我在启用开发服务器接受此类请求时遇到问题.这是场景:
当我在IE中运行客户端项目没有问题,因为IE不发送预检OPTIONS请求.当我在Chrome中运行它时,预检OPTIONS请求返回405方法不允许,Chrome放弃了该服务.以前版本的Chrome只会忽略错误并继续执行实际的POST请求(或Get,无论......),但后来的版本似乎更挑剔.
我还使用已部署的WCF项目遇到了这个问题,并通过将OPTIONSVerbHandler移动到IIS中Handler Mappings列表的顶部来解决它.
我应该指出,我正在使用我能想到的最慷慨的web.config设置来尝试允许CORS.例如,我在WCF项目的配置中有这个:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
<add name="X-Powered-By" value="*" />
</customHeaders>
</httpProtocol>
Run Code Online (Sandbox Code Playgroud)
无论如何,对代码运行的WCF项目的任何客户端跨源请求都会因405错误而失败.
是否有任何帮助设置WCF项目本身或IIS Express 8以启用CORS?
谢谢!
Fré*_*ric 13
你可以为wcf启用cors,一旦你知道怎么做就可以很简单.
从DavidG回应更一般的问题"IIS上的cors",响应非常接近基本解决方案所需的:
首先,配置OPTIONSVerbHandler在.Net处理程序之前执行.
OPTIONSVerbHandler并向上移动(大量点击......).您也可以通过重新定义下面的所有处理程序在web.config中执行此操作<system.webServer><handlers>.(<clear>然后<add ...>他们回来了,这就是IIS控制台的用途.顺便说一下,没有必要在这个处理程序上请求"读取"权限.)
其次,为您的cors需求配置自定义http标头,例如:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*"/>
<add name="Access-Control-Allow-Headers" value="Content-Type"/>
<add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS"/>
</customHeaders>
</httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
此示例为在web/app /目录中的所有请求的所有响应设置它们,其中是web.config.如果要将它们限制为某个URL,请将其放在<location>标记中.
您还可以在IIS控制台中添加这些自定义标头.
这是一个基本的解决方案,因为即使在不需要它的情况下它也会发送CORS头文件,可能会将您的应用程序打开到意外的用法.但是对于WCF来说,它看起来像是最简单的一个.
使用MVC或webapi,我们可以OPTIONS通过代码处理动词和cors标题("手动"或在最新版本的webapi中提供内置支持).
答案是使 WCF 接受 CORS 预检消息所需的配置与 IIS 服务器无关;相反,WCF 项目本身需要配置为使用 OPTIONS 动词处理 HTTP 请求。
长话短说:这样做真的很难。当涉及到端点时,WCF 是万能的,因此将其设置为使用一个端点(HTTP)执行一些非常具体的操作是不可取的,尽管这是可以做到的。真正的解决方案是使用 Web API,它是 HTTP 的大师,可以非常简单地设置来执行 CORS。
| 归档时间: |
|
| 查看次数: |
32809 次 |
| 最近记录: |