2014-11-04 48 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