加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

wcf – 配置IIS Express 8以启用CORS

发布时间:2020-12-14 18:26:03 所属栏目:资源 来源:网络整理
导读:我正在编写WCF服务,这些服务将被客户端使用,因此他们需要处理跨源请求.我在启用开发服务器接受此类请求时遇到问题.这是场景: 我在Visual Studio 2012的实例中运行WCF项目,使用IIS Express 8作为特定端口上的服务器. 我在另一个Visual Studio 2012实例中运行
我正在编写WCF服务,这些服务将被客户端使用,因此他们需要处理跨源请求.我在启用开发服务器接受此类请求时遇到问题.这是场景:

>我在Visual Studio 2012的实例中运行WCF项目,使用IIS Express 8作为特定端口上的服务器.
>我在另一个Visual Studio 2012实例中运行客户端项目,也使用IIS Express 8作为服务器.该项目使用AJAX来使用其他项目中的服务.

当我在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>

无论如何,对代码运行的WCF项目的任何客户端跨源请求都会因405错误而失败.

是否有任何帮助设置WCF项目本身或IIS Express 8以启用CORS?

谢谢!

解决方法

你可以为wcf启用cors,一旦你知道如何就可以很简单.

通过DavidG对更一般的问题“cors on IIS”的回应进行阐述,响应非常接近基本解决方案所需的响应:

>首先,配置OPTIONSVerbHandler以在.Net处理程序之前执行.

>在IIS控制台中,选择“处理程序映射”. (在服务器级别或站点级别执行此操作.在站点级别,它将重新定义您站点的所有处理程序,并忽略在此之后在服务器级别上所做的任何更改.当然,在服务器级别,如果他们需要他们可能会破坏其他站点自己处理选项动词.)
>在“操作”窗格中,选择“查看有序列表…”.寻找OPTIONSVerbHandler,并将其向上移动(大量点击……).

您也可以在web.config中通过重新定义< system.webServer>< handlers>下的所有处理程序来执行此操作. (< clear>然后< add ...>回来了,这就是IIS控制台的用途.顺便说一下,没有必要在这个处理程序上请求“读取”权限.)
>其次,为您的角色需求配置自定义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>

此示例将它们设置为对站点/ app /目录中所有请求的所有响应,其中是web.config.如果您想将它们限制为某个网址,请将其放在< location>中.标签.
您还可以在IIS控制台中添加这些自定义标头.

这是一个基本的解决方案,因为即使在不需要它的情况下它也会发送CORS头文件,可能会将您的应用程序打开到意外的用法.但是对于WCF来说,它看起来像是最简单的一个.

使用MVC或webapi,我们可以通过代码处理OPTIONS动词和cors标题(“手动”或在最新版本的webapi中提供内置支持).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读