2012-07-22 2 views
3

로컬 컴퓨터에서 webservice를 호출하려고합니다.
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가 Access-Control-Allow-Origin에 의해 허용되지 않습니다.

내 로컬 테스트 URL은 다음과 같습니다 : http://localhost/welcome/html/index.html

내가 실제 도메인에 내 코드를 업로드하고 거기에서 웹 서비스를 호출, 그것은 당연히 작동합니까하지만 난 크롬 콘솔에서 다음과 같은 오류를 얻을 수 .

이미 액세스 제어 헤더를 변경하려고했지만 그게 도움이되지 않습니다.

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에 있습니다. 이들은 서로 다른 영역에 있습니다. 그래서 작동하지 않습니다.

이 문제의 해결책은 CORS 사양의 일부인 Access-Control-Allow-OriginAccess-Control-Allow-Methods을 사용하는 것입니다. 응답 헤더에 이러한 값을 포함 시켰지만 브라우저가 OPTIONS 동사를 사용하여 호출이 허용되는지 확인하기 위해 비행 전 요청을 할 것이므로 아무 것도하지 않습니다. 서비스가 OPTIONS 동사를 처리 할 수 ​​없으므로 405 (Method Not Allowed) 오류가 표시됩니다.

다른 도메인에서 서비스에 액세스하려면 CORS를 지원하도록 WCF 서비스를 수정해야합니다. 나는이 연결을 추천 할 것이다 : http://blogs.microsoft.co.il/blogs/idof/archive/2011/07/02/cross-origin-resource-sharing-cors-and-wcf.aspx. 이를 사용하면 기존 코드를 변경하지 않고 서비스 지원 CORS를 만들 수 있습니다.

관련 문제