2013-06-19 41 views
2

我試過同步和異步方法。我已經測試了許多線程中提出的所有不同的事情,但仍然在上面的錯誤。

對於IE我得到「沒有交通工具」和FF一個面目可憎「異常......‘失敗’nsresult:‘0x80004005的(NS_ERROR_FAILURE)

當我從訪問服務在我的瀏覽器URL行,我得看到返回文本,SE的服務啓動並運行。(MyCloud.azurewebsites.net/MyService.svc/Ping

但是當我嘗試它不工作訪問它使用這個JS。

$.ajax({ 
    cache: false, 
    async: false, //have tried true too 
    type: "GET", 
    url: "http://MyCloud.azurewebsites.net/MyService.svc/Ping", 
    datatype: "text", 
    success: function (response) { ... }, 
    error: function (xhr, requestStatus, errorText) { ... } 
}); 

我測試了不同的瀏覽器(Chrome除外)。由於CORS問題,我測試了一些不同的端點,並對安全性進行了一些修改(transport,而不是none)。我仍然得到錯誤。而尋找這些只會帶來更多的困惑。

現在,我一直在解決這個問題一整天,我決定構建故障排除。

  • 上面的JS是否正確?
  • 以下端點定義和服務聲明是否也正確?
  • 我還能測試什麼?我該如何探究這個問題?
<endpoint name="UrlEndPoint" 
      behaviorConfiguration="UrlEndPointBehavior" 
      address="" 
      binding="webHttpBinding" 
      contract="MyNamespace.IMyService"/> 

<behavior name="UrlEndPointBehavior"> 
    <webHttp helpEnabled="true"/> 
</behavior> 
[OperationContract] 
[WebInvoke(UriTemplate = "Ping", Method = "GET")] 
String Ping(); 

完全迷路了,厭倦了的時刻。向正確的方向推進將是巨大的。

+0

這是一個跨域請求嗎? –

+0

@MikeBrant是的。 Azure上的服務可以來自任何地方。我讀過一些人遇到過CORS問題,但正如我在問題中提到的那樣,這隻會讓我頭疼。 :) –

回答

3

這是一個跨站點腳本錯誤。您需要調用服務器端處理程序(代理)來處理對Azure環境的請求。所以,你的AJAX調用看起來更像是這樣的:

$.ajax({ 
    type: "GET", 
    url: 'some/local/server-side/url/to/handle/the/call/to/"http://MyCloud.azurewebsites.net/MyService.svc/Ping", 
    datatype: "text", 
    success: function (response) { // handle response here from server-side proxy here }, 
    error: function (xhr, requestStatus, errorText) { ... } 
}); 

的問題是,你不能因爲XSS(跨站腳本)在瀏覽器的限制使得外部域調用。這是您選擇的瀏覽器實施的安全預防措施。