2012-07-22 324 views
3

我試圖從本地計算機調用Web服務。但我得到在Chrome控制檯以下錯誤:
http://www.test.com/service.svc/api/?cid=1 405 (Method Not Allowed) XMLHttpRequest cannot load http://www.test.com/service.svc/api/?cid=1.
Origin http://localhost is not allowed by Access-Control-Allow-Origin.
訪問控制 - 允許來源不允許訪問http:// localhost

我的本地測試網址是: http://localhost/welcome/html/index.html

當我我的代碼上傳到實際的域,並呼籲從那裏的web服務,但它ofcourse工作。

我已經嘗試更改訪問控制標題,但這沒有幫助。

Namespace RestService 

Public Class service 
    Implements Iservice 

    Public Function GetProvinces(ByVal cid As String) As AjaxControlToolkit.CascadingDropDownNameValue() Implements Iweddingservice.GetProvinces 
     WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Methods", "DELETE, POST, GET, OPTIONS") 
     WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*") 

     Dim MyConnection As SqlConnection = GetConnection() 
     Dim cmd As New SqlCommand("SELECT provinceid,title FROM provinces WHERE [email protected] ORDER BY title ASC", MyConnection) 
     cmd.Parameters.Add(New SqlParameter("@CountryID", cid)) 
     Dim values As New List(Of CascadingDropDownNameValue) 
     Try 
      MyConnection.Open() 
      Dim reader As SqlDataReader = cmd.ExecuteReader 
      While reader.Read 
       values.Add(New CascadingDropDownNameValue(reader("title").ToString, reader("provinceid").ToString)) 
      End While 
     Catch ex As Exception 

     Finally 
      MyConnection.Close() 
     End Try 
     Return values.ToArray 
    End Function 

End Class 


End Namespace  

回答

10

由於瀏覽器same origin policy,對服務的請求失敗。當您嘗試訪問資源http://www.test.com/時,您的本地服務器在http://localhost。這些都在不同的領域。所以它不會工作。

解決此問題的方法是使用Access-Control-Allow-OriginAccess-Control-Allow-Methods,這是CORS規範的一部分。您已將這些內容包含在響應標題中,但這樣做不會有任何好處,因爲瀏覽器將使用OPTIONS動詞發出預先請求,以驗證是否允許該呼叫。由於您的服務無法處理OPTIONS動詞,因此您會看到405(方法不允許)錯誤。

因此,如果您希望您的服務可以從其他域訪問,那麼您將不得不修改WCF服務以支持CORS。我會推薦這個鏈接:http://blogs.microsoft.co.il/blogs/idof/archive/2011/07/02/cross-origin-resource-sharing-cors-and-wcf.aspx。通過使用此功能,您可以在不改變現有代碼的情況下爲CORS服務提供支持。

相關問題