2011-09-21 2 views
0

J'ai l'interface ci-dessous qui définit mes services WCF. Parfois, le paramètre 'parameters' a été nul quand on l'appelle. D'autres fois, ce n'est pas le cas.

[ServiceContract] 
public interface IContactRelationshipManager 
{ 
    [OperationContract] 
    [WebInvoke(
    Method = "POST", 
    ResponseFormat = WebMessageFormat.Json, 
    RequestFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Wrapped)] 
    void SaveActivityLogEntry(SaveActivityLogEntryParameters parameters); 
} 

Voici ma section comportements dans le app.config (je suis en cela comme un service Windows)

<behaviors> 
    <endpointBehaviors> 
    <behavior name="jsonBehavior"> 
     <webHttp /> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="ContactRelationshipManagerBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

Voici mon appel javascript:

$.ajax(
{ 
    type: "POST", 
    cache: false, 
    contentType: "application/json", 
    url: serviceCallUrl, 
    data: JSON.stringify(params), 
    success: callbackHandler 
}); 

Le résultat de JSON.stringify(params) est

"{" parameters ": {" ContactEmailAddress ":" [email protected] "," LiasonsForContact ": [25], "ActivityLogEntry": {"Date": "/ Date (1316634966273) /", "LiasonFK": 25, "TypeFK": 1, "MethodFK": 3, "Description": "tt", "ContactFK": 32} }} "

Y at-il quelque chose que je fais mal ici en pratique? Cela fonctionne bien tout le temps en chrome et firefox. J'ai aussi testé ceci avec Fiddler pendant le débogage du service et le paramètre est revenu à zéro avec Fiddler fermé et non nul quand Fiddler est ouvert.

Répondre

1

Je fini par jouer avec un tas de techniques différentes pour obtenir de travailler, y compris en prenant un cours d'eau comme mon paramètre de fonction et sérialisation à l'intérieur de la fonction avec JSON.NET. Cela n'a pas fonctionné non plus. J'ai finalement trouvé ce question qui m'a amené à croire que c'était un problème NTLM. Mon site Web utilise l'authentification Windows dans IIS7 et appelle un service WCF hébergé en tant que service Windows. Du côté du serveur, j'ai changé la sécurité sur mon webHttpBinding être en tant que tel:

<binding name="webBinding"> 
    <security mode="TransportCredentialOnly"> 
    <transport clientCredentialType="Windows" proxyCredentialType="None" 
     realm="" /> 
    </security> 
</binding> 

Après avoir fait cela tout fonctionne bien dans Internet Explorer

0

Pouvez-vous utiliser Fiddler, par exemple, pour renifler ce qui est réellement envoyé? Je passe normalement un objet de données directement à $.ajax et le laisse gérer la sérialisation de l'objet. J'ai une supposition que le JSON stringifié est encodé de manière inappropriée.

+0

Le problème est que si je Fiddler alors mon service WCF reçoit le paramètre correctement. Je ne peux pas utiliser Fiddler pour tester parce que cela a un impact sur le résultat. – skeletank

0

En fait, je n'ai pas eu de problèmes, vous avez toutes les configurations requises sauf que vous avez manqué quelques propriétés dans votre appel ajax. Je ne sais pas si cela pourrait aider.

contentType: "application/json; charset=utf-8" 
dataType: "json" 
processData: false 
Questions connexes