困扰多年的消息中间件的跨域访问问题终于得到了解决

使用多年的一个开源的消息中间件,在以往的项目中,C/S编程没有任何问题,十分便捷顺手。

本次需要通过网站来订阅消息,发现网页一直报No ‘Access-Control-Allow-Origin‘ header的错误,这个问题我知道很久了,一直没有解决,今天终于解决了,做一个记录。

我先后尝试了以下方法:

1、给消息中间件的App.config中增加以下配置节,失败:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/>
        <add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/>
        <add name="Access-Control-Allow-Origin" value="*"/>
      </customHeaders>
    </httpProtocol>
  </system.webServer>

2、给客户端网站的IIS增加http响应头部设置,Access-Control-Allow-Origin,*,失败;

3、配置网站的访问地址和消息中间件的访问地址在同一个域名和端口,成功,但这个其实不能跨域,还在域里面。只要客户端网站域名、端口和消息中间件的域名端口有一个不一样还是报跨域错误。

4、新建一个网站,域名和端口配置为和消息中间件一致,并给该网站的http响应头部设置,Access-Control-Allow-Origin,*,失败。

5、通过给网站增加clientaccesspolicy.xml文件来解决跨越,依然失败!

6、于是从网上搜索WCF 跨域,找到一篇文档:https://blog.csdn.net/dangercheng/article/details/17380529,该文件详细描述了从WCF服务端去处理问题,其本质还是给网站增加clientaccesspolicy.xml文件来解决跨越,依然失败!

最后,在网上找到一篇文章:https://www.jb51.net/article/190628.htm

最终,还是认为需要改消息中间件服务端代码才行!可是开源代码看着头痛啊,一是代码太多,二是代码晦涩难懂。

认真查看消息中间件源代码,找到以下位置,即在开频道、订阅消息、发送消息的返回之前对Context的头部添加跨域标记(注意不要重复添加,否则又报Multip Access-Control-Allow-Origin的错误),代码如下:

发布测试,终于成功,困扰多年的问题得到了解决,可以跨系统使用了!

服务端:

发送端的控制台程序:

网页端:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值