2014-11-04 44 views
1

我使用的是Server Sent Events in ServiceStack,我需要允许跨越原点使用它。支持CORS的服务器发送的事件

我已经在我的应用程序中设置了ServiceStack CorsFeature,但这并不符合ServerEventsFeature

我可以手动添加Access-Control-Allow-Origin头中的OnCreated,并允许请求event-stream,但请求心跳失败,因为我不能设置此请求头。

Plugins.Add(new ServerEventsFeature { 
    HeartbeatInterval = new TimeSpan(0,0,30), 
    OnCreated = (subscription, request) => { 
     request.Response.AddHeader("Access-Control-Allow-Origin","*"); 
    } 
    ... 
} 

作为上证所功能is implemented on a RawHandler,我看不出如何让这头到请求。有没有一种方法可以设置所有/event- url的标题?

谢谢。

回答

1

只有/event-stream/event-heartbeat是原始HTTP处理程序,其他event-*路由是通过ServiceStack的请求管道的正常ServiceStack服务。

我已经添加了一个更改,以自动将Config.GlobalResponseHeaders应用于/event-stream/event-heartbeat处理程序in this commit。此更改现在应自动添加CORS Headers when CorsFeature is enabled

我还添加了OnHeartbeatInit/event-heartbeat回调匹配/event-streamOnInit回调,所以你也可以添加自定义页眉心跳处理为好。

Plugins.Add(new ServerEventsFeature { 
    HeartbeatInterval = new TimeSpan(0,0,30), 
    OnInit = (request) => { 
     request.Response.AddHeader(...); 
    }, 
    OnHeartbeatInit = (request) => { 
     request.Response.AddHeader(...); 
    }, 
    ... 
} 

这种变化可以从v4.0.34 +这就是现在available on MyGet

+0

谢谢德米斯:)这可能是我最喜欢的ServiceStack功能。 – Scott 2014-11-04 19:27:22

+0

@斯科特ahh很酷,很高兴听到它:)希望你做一些有趣的事情吧! – mythz 2014-11-04 19:35:43

+1

它将进入企业iPad应用程序,而不是Apple推送通知。这对我很有趣:/ – Scott 2014-11-04 19:44:03