문제

까다로운 문제가 있습니다.

사용자가 키오스크에서 사이트에서 확인할 때 영수증 인쇄물을 허용 해야하는 프로젝트를 진행하고 있습니다. 드라이버 및 서식과 관련된 이유로, 영수증 인쇄를 처리하기 위해 Word와 함께 COM 자동화를 사용하고 있습니다. 이 코드를 로컬 컴퓨터에서 실행하는 웹 서비스에 래정했습니다.

이 계획은 웹 서비스를 실행하는 로컬 컴퓨터의 URL에 페이지 HTML에 간단한 jQuery ajax 호출을 배치하는 것이 었습니다. 이 ajax 호출에는 순서의 JSON 개체가 포함되어 있으며 웹 서비스에 의해 사제화되어 인쇄됩니다. LocalHost를 사용하면 잘 작동하지만 프로덕션에서는 크로스 도메인 Ajax 호출 규칙이 없습니다.

웹 사이트에서 실행되는 코드가 인쇄 서비스를 실행하는 로컬 웹 서비스에 연락 할 수 없기 때문에 프록시는 작동하지 않습니다. 웹에서 찔린 후 JSONP를 사용하는 것이 이것에 대한 해결책 일 수 있지만 그것을 작동시키는 방법을 알 수는 없습니다. 대부분의 자습서는 단순히 데이터를 게시하는 것이 아니라 원격 데이터를 얻으려고한다고 가정합니다. 인쇄 웹 서비스는 무효를 반환합니다.

JSONP와 함께 작동하도록 웹 서비스 (ASMX)를 어떻게 구성하고 jQuery 코드는 어떤 모습입니까? 현재는 다음과 같이 보입니다.

function printReceipt(data) {
   $.ajax({
       type: "POST",
       url: "http://192.9.200.165/ContestWebService/Service1.asmx/PrintOrderReceiptJson",
       data: data,
       dataType: "json",
       contentType: "application/json; charset=utf-8",
       error: function(xhr, msg) { alert(xhr.statusText); }
    });
}

JSONP에 대한 더 간단한 대안 또는 내가 고려하지 않은 다른 가능한 솔루션도 도움이 될 것입니다.

도움이 되었습니까?

해결책

JSONP는 단순히 a를 추가합니다 script 태그 head 섹션은 요청을 받기 위해서만 제한됩니다. JSONP를 처리하도록 ASMX 웹 서비스를 구성하려면 수동으로 직렬화를 처리해야합니다.

[WebMethod]
[ScriptMethod(UseHttpGet=true, ResponseFormat=ResponseFormat.Json)]
public string Foo()
{
    var json = new JavaScriptSerializer().Serialize(new 
    {
        Prop1 = "some property",
    });
    string jsoncallback = HttpContext.Current.Request["jsoncallback"];
    return string.Format("{0}({1})", jsoncallback, json);
}

그리고 클라이언트 측 :

$.getJSON("http://192.9.200.165/ContestWebService/Service1.asmx/PrintOrderReceiptJson?jsoncallback=?",
    function(data) {
        alert(data);
    });

또 다른 대안 크로스 도메인 Ajax 호출은 플래시를 사용하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top