2013-01-06 71 views
0

去的時候沒有叫我有下面的JS代碼signalR客戶端功能通過CDN

​​

該輪轂代碼

public class MyHub : Hub 
{ 
    public override Task OnConnected() 
    { 
     using (var conn = new SqlConnection(ConnectionString)) 
     { 
      conn.Open(); 

      //Using Dapper 
      var data = conn.Query("SELECT data FROM Sql").ToList(); 


      return Clients.Caller.initChart(data); 
     } 
    } 

} 

這工作完全在我的機器上(Win7Pro,IIS 7)但是,當我將它部署到我們的服務器(Win2008R2,iis7)時,它不會調用initChart函數。我已經在服務器上安裝了VS,當我調試該進程時,OnConnected事件被調用併成功完成,但客戶端上沒有任何反應。沒有JS錯誤或服務器端錯誤發生,我可以看到。

只是爲了進一步混淆事情,我有一個NServiceBus處理程序調用客戶端聲明的另一個函數,每次都調用該函數,我在那裏放置一個瀏覽器斷點&我可以看到它被調用。

檢查我的機器上的signalR日誌,它使用SSE,但在服務器上它回退到長輪詢。

更新:剛剛意識到服務器坐在Akamai的DSD後面,如果我沒有經過這個,它的工作原理,但我不明白爲什麼它有所作爲。

月2日更新:

這裏是爲connect?transport=serverSentEvents&connectionId=9fce5552-4c2e-4739-93ea-501dda0a0654&connectionData=%5B%7B%22name%22%3A%22navigationtiminghub%22%7D%5D&tid=9 HTTP/1.1呼叫

首先,當我直接打電話到原點請求的不同響應頭:

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Transfer-Encoding: chunked 
Content-Type: text/event-stream 
Expires: -1 
Server: Microsoft-IIS/7.5 
Date: Mon, 07 Jan 2013 01:08:26 GMT 

,這是Akamai的響應。注意,根據Wireshark的,從我們的服務器與Akamai的響應是與上述相同的反應

HTTP/1.1 200 OK 
Content-Type: text/event-stream 
Server: Microsoft-IIS/7.5 
Expires: Mon, 07 Jan 2013 01:07:23 GMT 
Cache-Control: max-age=0, no-cache, no-store 
Pragma: no-cache 
Date: Mon, 07 Jan 2013 01:07:23 GMT 
Content-Length: 486 
Connection: keep-alive 

另外,在第一個,所述連接保持打開(因爲它應該),並在其關閉第二。

更新3:這純粹是一個Akamai問題,我們只是切換到Edgecast &他們正確地響應SSE連接。

+0

嘗試啓用登錄。 $ .connection.hub.logging = true – davidfowl

+0

好的,謝謝,在服務器SSE失敗,回落到longPolling –

+0

是否有任何服務器端錯誤? – davidfowl

回答

2

您可以在上面的標題中看到這一點,因爲您有一個Content-Length標題,並且您在響應中也缺少Transfer-Encoding標題。

您不能啓用緩衝功能,但您可以讓他們的專業服務團隊爲您完成。

這似乎修復了Chrome的服務器發送事件,但不是IE9的Forever Frame。

使用永久幀這似乎是一個壓縮問題。 Transfer-Encoding: chunked標題將從您的請求中剔除Accept-Encoding標題。然後IE很好地工作。中心網址需要排除邊緣的gzip功能。