2011-05-04 6 views
0

저는 자바 스크립트에 익숙하지 않습니다. 제게 어려움을주고있는 문제가 있습니다.WCF javascript는 크로스 도메인을 호출합니다

나는 추적 자바 스크립트를 넣고 싶습니다. 이 스크립트는 wcf 서비스를 호출하여 클라이언트 브라우저 정보, 방문한 페이지 및 타임 스탬프를 추적합니다. 문제는 자바 스크립트 호출시 "405 Method Not Allowed"오류가 발생한다는 것입니다. 이 서비스는 다른 도메인에 있습니다. 이제 localhost에서 테스트합니다. 브라우저의 새 페이지에서 호출 할 수 있기 때문에 서비스가 정상적으로 작동합니다. 같은 문제가 발생 했습니까? 이 문제를 어떻게 해결할 수 있습니까?

내 자바 스크립트 코드는 다음과 같습니다

WCF 서비스 코드 :

[ServiceContract(Name = "CustomersAssistantService", Namespace = "CustomersAssistantService")] 
public interface ICustomersAssistantService 
{ 
    [OperationContract] 
    [WebGet] 
    string DoWork(); 

    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)] 
    [OperationContract] 
    string Sum(int n1, int n2); 
} 

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class CustomersAssistantService : ICustomersAssistantService 
{ 
    public string DoWork() 
    { 
     return "work done"; 
    } 

    public string Sum(int n1, int n2) 
    { 
     return (n1 + n2).ToString(); 
    } 
} 

자바 스크립트 호출 :

function CallWcf1(){ 
     var _I = this; 
     var url = "http://localhost:58399/CustomersAssistantService.svc/customersAssistantService/";   

      var methodUrl = _I.serviceUrl + 'dowork'; 

      $.ajax({ 
         url: methodUrl, 
         data: '', 
         type: "GET", 
         processData: false, 
         contentType: "application/json", 
         timeout: 10000, 
         dataType: "text", // not "json" we'll parse 
         success: 
         function(res) 
         {          
          if (!callback) return; 
          // *** Use json library so we can fix up MS AJAX dates 
          var result = JSON2.parse(res); 
          // *** Bare message IS result 
          if (bare) 
          { callback(result); return; } 
          // *** Wrapped message contains top level object node 
          // *** strip it off 
          for(var property in result) 
          { 
           callback(result[property]); 
           break; 
          }      
         }, 
         error: 
         function(xhr) 
         { 
          if (!error) return; 
          if (xhr.responseText) 
          { 
           var err = JSON2.parse(xhr.responseText); 
           if (err) 
            error(err); 
           else  
            error({ Message: "Unknown server error." }) 
          } 
          return; 
         } 
        }); 
    } 

내가 뭔가 잘못하고 있습니까?

덕분에 많이, 라두 D

답변

1

the Same Origin Policy으로 실행 중입니다. Ajax 요청은 같은 출처 과 대화하는 것으로 제한됩니다.; 도메인 간 요청은 일반적으로 거부됩니다. 사용자는 매우 현대적인 브라우저 (그렇게하지 IE7), 당신은 당신의 서버에 Cross Origin Resource Sharing을 구현할 수 사용할 경우

  • :

    는 필요에 따라 다양한 방법이있다. 이것은 W3C의 표준으로, 서버가 교차 출처의 자원에 대한 액세스를 열 수 있지만 최신 브라우저에서만 지원됩니다. (그리고 IE에서는 지원되지만, 보통 XMLHttpRequest 개체가 아니라 XDomainRequest 개체를 사용해야합니다.

  • JSON-P interface을 구현할 수 있습니다.
  • 다른 도메인에 알림을 보내려는 경우 해당 src 속성이있는 요소를 추가하여 도메인에서 리소스 (img, script 등)를로드하면됩니다. 이것은 멱등 한 자원을위한 것으로 생각되는 GET 메소드를 사용하는 것으로 제한된다는 것을 의미합니다.
+0

Google 추적 코드의 작동 방식을 알고 계십니까? 나는 그것이 정보 추적을위한 서비스 호출을한다고 가정합니다. –

+0

@ Radu : 나는 당신이 코멘트를 할 때 어떻게 작업할지에 대한 몇 가지 사항을 추가했다. Google은 세 번째 요소 ('script' 요소)를 사용합니다. –

+0

고마워요. 당신은 내 하루를 저장 :) –

0

는 지금까지 내가 아는 한, WCF에 대한 요청은 POST 방식을 사용하므로으로 변경해야합니다 : AJAX 호출에서

type: "POST", 

.

+0

나는 또한 게시판을 사용해 보았습니다. 두 가지 테스트 방법 중 하나는 게시판이고 하나는 게시판이지만 ... 교차 도메인 호출에 문제가 있다고 생각합니다. –

관련 문제