Question

Got genre d'un problème délicat.

Je travaille sur un projet où nous avons besoin pour permettre des impressions de réception lorsque des utilisateurs sur notre site à un kiosque. Pour des raisons ayant trait aux conducteurs et la mise en forme, j'utilise l'automatisation COM avec Word pour gérer l'impression des reçus. J'ai enveloppé ce code dans un service Web qui fonctionne sur une machine locale.

Le plan était de mettre un simple appel ajax jQuery dans le code HTML de la page à l'URL de la machine locale exécutant le service Web. Cet appel ajax contient un objet JSON de l'ordre, qui est désérialisé par le service Web et imprimé. Fonctionne très bien si j'utilise localhost, mais dans la production, je vais aller à l'encontre d'aucune règle de cross domain appels ajax.

Un proxy ne fonctionnera pas parce que le code en cours d'exécution sur le site ne peut pas contacter le service Web local exécutant le service d'impression. Après farfouillé sur le web, j'ai découvert que l'utilisation JSONP peut être une solution à cela, mais je ne peux pas comprendre comment le faire fonctionner. La plupart des tutoriels supposent que vous essayez d'obtenir des données à distance plutôt que des données simplement affichage. Le service web d'impression retourne void.

Comment puis-je configurer mon service Web (asmx) pour travailler avec JSONP et qu'est-ce que mon code jQuery ressembler? il semble actuellement quelque chose comme ceci:

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

Toutes les alternatives plus simples à JSONP, ou toute autre solution possible que je ne l'ai pas considéré serait utile aussi bien.

Était-ce utile?

La solution

JSONP ajoute simplement une étiquette de script à la section head et est donc limité que pour les requêtes GET. Pour configurer votre service Web asmx pour gérer JSONP vous devez gérer manuellement sérialisation:

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

Et du côté client:

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

Une autre alternative pour .

scroll top