2012-02-28 101 views
3

我有一個Azure Web角色,它訪問基於外部WCF的SOAP Web服務(端口80)以獲取各種數據位。這項服務的反應非常不穩定。我經常得到以下錯誤。訪問外部Web服務的Azure Web角色問題

沒有端點收聽 http://www.myexternalservice.com/service.svc可以接受該消息。這通常是由不正確的地址或SOAP操作導致的 。

要隔離問題,我創建了一個簡單的控制檯應用程序,以1秒的間隔重複調用此服務並記錄所有響應。

using (var svc = new MyExternalService()) 
    { 
     stopwatch.Start(); 
     var response = svc.CallService(); 
     stopwatch.Stop(); 
     Log(response, stopwatch.ElapsedMilliseconds);  
    } 

如果我RDP到我的Azure的web實例之一,並運行這個程序需要10至20次嘗試獲取來自外部服務的有效響應之前。這些第一次嘗試總是伴隨着上述錯誤。在這個「熱身期」之後,它運行良好。如果我停止了應用程序,然後立即重新啓動,它必須通過相同的「預熱」時間返回。

然而,如果我跑其他任何計算機此相同的應用程序,我立即收到有效答卷。我在運行於多個數據中心(非Azure)的服務器,不同網絡上的桌面等上運行此記錄器應用程序......這些測試運行始終非常穩定。

我不確定爲什麼這個服務會在Azure環境中以這種方式反應。不幸的是,短期內我不得不打電話給這項服務,但我的用戶不能容忍這種不一致。

Azure服務器上的網絡流量捕獲指示大量SynReTransmit以10秒的間隔在我遇到連接錯誤的同一時間內。一旦「預熱」完成,SynReTransmit不再發生。

+0

你可以得到一個網絡跟蹤,看看你回來了什麼? – Tom 2012-02-28 15:56:18

+1

我現在正在安裝WireShark。 – 2012-02-28 16:03:24

+0

看起來這些請求從未將其發送到Web服務服務器。網絡流量捕獲指示多個SynReTransmit沒有相關響應。 – 2012-02-28 20:49:34

回答

-1

我們發現一個解決方案對於這個問題,雖然我不完全滿意它。在耗盡所有其他的行動方案後,我們將負載平衡器更改爲第7層負載平衡第4層負載平衡。雖然這解決了丟失請求的問題,但我不確定爲什麼這會產生影響。

+0

你改變負載上的外部服務或Azure上的平衡? – Pete 2013-02-12 16:00:31

-1

部署Windows Azure應用程序的Windows Azure數據中心區域可能不在外部Web服務附近。您正在嘗試的本地機器(可以正常工作)可能接近Web服務。這就是爲什麼Azure中可能存在巨大的延遲,這可能會導致它失敗。

成功從Azure VM中的瀏覽器訪問WSDL可能是由於瀏覽器緩存。從瀏覽器進行函數調用會告訴你它是否實際建立連接。

+0

Web服務數據中心實際上是蔚藍的數據中心的幾英里之內。另外,我還RDP'd到Azure的服務器和測試延遲,這是非常非常低的。我不是從瀏覽器瀏覽...的呼叫從一個控制檯應用程序來。 – 2012-03-16 14:55:50