Pregunta

Got tipo de un problema complicado.

Estoy trabajando en un proyecto en el que necesitamos para permitir recibos impresos cuando se echa un vistazo a los usuarios en nuestro sitio en un quiosco. Por razones relativas a los conductores y el formato, estoy usando la automatización COM con la Palabra de manejar imprimir los recibos. Me he envuelto este código en un servicio web que se ejecuta en una máquina local.

El plan era poner una simple llamada ajax jQuery en la página HTML a la URL de la máquina local que ejecuta el servicio web. Esta llamada AJAX contiene un objeto JSON de la orden, que se deserialized por el servicio web e impreso. Funciona bien si uso localhost, sin embargo, en la producción voy a ir en contra de ninguna regla llamadas ajax dominios.

Un proxy no funcionará debido a que el código que se ejecuta en el sitio web no puede ponerse en contacto con el servicio web local que ejecuta el servicio de impresión. Después de hurgar en la web, he descubierto que el uso de JSONP puede ser una solución a esto, pero no puedo encontrar la manera de hacer que funcione. La mayoría de los tutoriales suponen que usted está tratando de obtener algunos datos remotos en lugar de sólo los datos simplemente por publicar. El servicio de impresión de banda regresa vacía.

¿Cómo puedo configurar mi servicio web (ASMX) para trabajar con JSONP y lo miraría mi código jQuery como? Actualmente se ve algo como esto:

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); }
    });
}

Cualquier alternativas más simples a JSONP, o cualquier otra solución posible puede que no haya considerado que sería útil también.

¿Fue útil?

Solución

JSONP simplemente añade una etiqueta script a la sección head y por lo tanto se limita sólo a las peticiones GET. Con el fin de configurar el servicio web ASMX para manejar JSONP tendrá que manejar manualmente la serialización:

[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);
}

Y el lado del cliente:

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

Otra alternativa para dominios llamadas AJAX es utilizar flash .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top