2012-07-25 2 views
4

jQuery에서 WCF 메서드를 호출 할 때 오류가 발생했습니다. localhost에서 구현할 때 호출이 올바르게 반환되지만 서비스가 별도의 서버에서 호스팅 될 때 액세스 거부 오류가 발생합니다. HTTP : // localhost를 : 3369/AppsterWcfService.svc/DoWorkjQuery로 액세스 거부 오류 [로컬 호스트에서 정상적으로 실행]

서비스가 예를 실행하는 경우 프로젝트를 로컬로 실행하고 확인

  1. - : 여기

    는 오류를 재현하는 단계입니다
  2. 테스트 클라이언트 (test.html) 페이지를 로컬로 만들고이 프로젝트를 실행하십시오. 로그인 버튼을 클릭하면 정상적으로 작동합니다.

  3. 이제 원격 서버에서 서비스를 호스팅하고 URL을 호스트 된 서비스의 새로운 URL 즉 URL로 바꿉니다.

  4. 이제 test.html 페이지를 실행하고 버튼을 클릭하십시오. 여기에 액세스가 거부되었습니다.

    1. JQuery와 아약스 호출에서 다른 매개 변수를 추가 MVC
    2. 처리기
    3. 간단한 .aspx 페이지
    4. 를 사용하여 - :

    나는 서버 등을 액세스하는 다양한 방법을 시도 및 web.config 파일.

  5. iis에서 다른 사용 권한이 부여되었습니다. iuser, 익명, 게스트 등.

jQuery와 관련하여 일종의 크로스 도메인 관련 문제라고 생각합니다. 도움이 될 것입니다. 당신은 웹 요청에 대한 same origin policy을 위반하는 것처럼

덕분에, -Sumit

+0

또한 예를 들어 서비스가 어떻게 사용되고 jquery가 사용되는지 샘플 코드를 게시 해주세요. – Rajesh

답변

1

위의 서비스에 대한

이제
[ServiceContract] 
    public interface IJSONPService 
    { 
     [OperationContract] 
     [WebGet] 
     string GetDate(); 

     [OperationContract] 
     [WebInvoke] 
     string PostData(string name); 
    } 

내 설정 항목을 표시 보이는 :

<services> 
    <service name="Service.JSONPService"> 
     <endpoint address="" binding="webHttpBinding" behaviorConfiguration="json" bindingConfiguration="defaultRestJsonp" contract="Service.IJSONPService"> 
     </endpoint> 
    </service> 
</services> 
<behaviors> 
     <endpointBehaviors> 
     <behavior name="json"> 
      <enableWebScript /> 
     </behavior> 
    </behaviors> 
</endpointBehaviors> 
<webHttpBinding> 
     <binding name="defaultRestJsonp" crossDomainScriptAccessEnabled="true"> 
      <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="64" maxNameTableCharCount="2147483647" /> 
      <security mode="None" /> 
     </binding> 
</webHttpBinding> 

당신은 할 요청을 결정을 담당 바인딩 요소 "defaultRestJsonp"의 crossDomainScriptAccessEnabled 속성을주의 할 필요가 적절하게 응답을 변환 JSONP과 페이지에서

이제 쿼리 문자열로 제공되는 URL에서 콜백 메서드에서 할 포장되는 WCF REST 서비스 위의 그림과 같이 호출 자바 스크립트 아래 :

function TestingWCFRestWithJsonp() { 
       $.ajax({ 
        url: "http://domain.com/Service/JSONPService.svc/GetDate", 
        dataType: "jsonp", 
        type: "GET", 
        timeout: 10000, 
        jsonpCallback: "MyCallback", 
        success: function (data, textStatus, jqXHR) { 
         alert(data); 
        }, 
        error: function (jqXHR, textStatus, errorThrown) {alert('error'); 

        }, 
        complete: function (jqXHR, textStatus) {alert('complete'); 
        } 
       }); 
      } 
      function MyCallback(data) { 
       alert(data); 
      } 

$ .ajax 메서드 호출에서 jsonpCallback 속성을 확인하십시오.

GET http://localhost/Service/JSONPService.svc/GetDate?callback=MyCallback&_=1343391683779 HTTP/1.1 
Host: localhost 
Connection: keep-alive 

을 그리고 WCF REST 서비스에서 원시 응답은 다음과 같습니다 :

웹 서비스 호출에 원시 요청은 다음과 같습니다

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: application/x-javascript 
Date: Fri, 27 Jul 2012 12:21:23 GMT 
Content-Length: 27 

MyCallback("27\/07\/2012"); 

참고 : JSONP를 수행 할 때 $ .ajax 메소드를 요청하십시오 error/complete/success가 호출되지 않습니다.

+0

감사합니다. Rajesh. 이것은 나를 위해 일했습니다. – Bathla

1

소리가 난다.

브라우저 (http/https), 서버 및/또는 포트가 원격 서비스와 다른 경우 동일한 발신 정책을 위반하게되며 브라우저가 해당 전화가 걸리지 않도록합니다 .

페이지가 연결되어있는 (프록시처럼 작동하는) 서버 측 코드에서 서비스를 호출하거나 JSONP 서비스에서 JSON 형식으로 데이터를 반환하도록 요청해야합니다. 메서드 호출.내 서비스는 아래와 같습니다

: 당신이 jQuery를 아래 샘플을 찾아보세요 사용하여 크로스 도메인 WCF의 REST 서비스를 소비하려면

+0

JSONP에 대한 응답을 제안 된대로 형식화하려고 시도하는 동안 도움을 주셔서 감사합니다. jQuery 클라이언트가 Apache에서 호스팅되는 PHP 서비스에 대한 웹 서비스 호출을 할 때 응용 프로그램이 잘 실행된다는 것을 알리고 싶습니다. 섬기는 사람. – Bathla

+0

또한 "귀하의 페이지가 연결된 서버 측 코드에서 서비스를 호출해야합니다."와 마찬가지로 여전히 도메인 간 호출이됩니다. 나는 그것을 시도하고 동일한 웹 서버 자체에서 호스트 된 웹 서비스에 액세스 할 때 동일한 오류가 발생합니다. [IIS] – Bathla

+0

시도한 모든 트릭에서 다음과 같이 말할 수 있습니다. - a) 확실히 도메인 간 와 관련된 문제 b) IIS 구성과 관련된 문제 아마도 더 많은 내용이있을 수 있지만 필자의 필사적 지성에서 추측 할 수있는 것은 : – Bathla

관련 문제