jQuery와 함께 ASP.NET에 크로스 도메인 JSON을 게시합니다
문제
까다로운 문제가 있습니다.
사용자가 키오스크에서 사이트에서 확인할 때 영수증 인쇄물을 허용 해야하는 프로젝트를 진행하고 있습니다. 드라이버 및 서식과 관련된 이유로, 영수증 인쇄를 처리하기 위해 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 호출은 플래시를 사용하는 것입니다.