2010-04-27 7 views
0

J'utilise un service proxy pour permettre à mon côté client javascript pour parler à un service sur un autre domaineproblème avec JSON format date lors de l'appel proxy interdomaine

Le proxy est un simple fichier ashx avec obtient simplement la demande et il transmet sur le service de l'autre domaine:

using (var sr = new System.IO.StreamReader(context.Request.InputStream)) 
      { 
       requestData = sr.ReadToEnd(); 
      } 

      string data = HttpUtility.UrlDecode(requestData); 

      using (var client = new WebClient()) 
      { 
       client.BaseAddress = serviceUrl; 
       client.Headers.Add("Content-Type", "application/json"); 

       response = client.UploadString(new Uri(webserviceUrl), data); 
      } 

le client javascript appelant cette procuration ressemble à ceci

function TestMethod() { 

    $.ajax({ 
     type: "POST", 
     url: "/custommodules/configuratorproxyservice.ashx?m=TestMethod", 
     contentType: "application/json; charset=utf-8", 
     data: JSON.parse('{"testObj":{"Name":"jo","Ref":"jones","LastModified":"\/Date(-62135596800000+0000)\/"}}'), 
     dataType: "json", 
     success: AjaxSucceeded, 
     error: AjaxFailed 
    }); 

    function AjaxSucceeded(result) { 
     alert(result); 
    } 

    function AjaxFailed(result) { 
     alert(result.status + ' - ' + result.statusText); 
    } 
} 

cela fonctionne bien jusqu'à ce que je passer une date. À quel point j'obtiens une erreur de demande de mauvaise quand le proxy essaye d'appeler le service. C'est-à-dire, si je supprime le ,"LastModified":"\/Date(-62135596800000+0000)\/" des données json alors l'appel réussit. Ajoutez-le à nouveau et il échoue.

Si j'appelle l'appel du même domaine, c'est correct, c'est seulement quand il passe par le proxy qu'il échoue.

Je l'ai fait fonctionner à un moment donné, mais l'ai maintenant perdu.

Avoir essayé d'utiliser JSON.Parse sur l'objet avant de l'envoyer. et JSON.Stringify, mais pas de joie

Quelqu'un at-il des idées ce que je suis manquant?

ont également essayé les méthodes d'analyseur personnalisées mentionnées dans cet article http://www.west-wind.com/Weblog/posts/896411.aspx

Toutes les idées?

Répondre

1

Si vous POSTez les données, avez-vous besoin de l'UrlDecode? Si le signe plus passe à UrlDecode tel quel, je suppose qu'il sera traduit dans un espace, ce qui pourrait vous causer un problème de format de date. D'où vient exactement l'erreur que vous obtenez?

0

tourne cette ligne est non nécessaire

string data = HttpUtility.UrlDecode(requestData); 
0

Eh bien, on dirait que votre ashx ne passe pas la demande/réponse tout droit, à droite? Ça change ça. Je ne suis pas un gars .net, et je ne sais pas vraiment ce que fait votre code, mais je dirais que vous devriez vous assurer qu'il fait le moins possible. Une autre chose à regarder, lors de la création d'une page proxy, est de savoir si vous envoyez la réponse directement, ou si vous la chargez en mémoire dans votre proxy avant de commencer à l'envoyer. La meilleure façon de le faire, je crois, est simplement de transmettre les données à mesure que votre procuration le reçoit.

Questions connexes