POSTE à WCF de Fiddler réussit, mais transmet des valeurs null

J'ai suivi cette série de vidéos sur WCF et avoir la démo de travail. Il consiste en la construction d'un service WCF qui gère étudiant de formulaires d'évaluation, et met en œuvre les opérations CRUD pour fonctionner sur une liste de ces évaluations. J'ai modifié mon code un peu en fonction de l' ce guide de sorte qu'il sera de retour JSON résultats à un navigateur ou Fiddler demande. Mon objectif est de comprendre comment utiliser le service par la création de ma propre demandes dans un violon, et ensuite utiliser ce format pour utiliser le service à partir d'une application sur un appareil mobile.

J'ai de la difficulté à l'aide de la SubmitEval méthode (enregistrer une évaluation) de Fiddler. L'appel fonctionne, mais tous les champs de Eval sont nuls (ou par défaut) à l'exception de Id, qui est défini dans le service lui-même.

Voici mon Eval déclaration (à l'aide des propriétés, au lieu de champs cette question):

[DataContract]
public class Eval //Models an evaluation
{
    [DataMember]
    public string Id { get; set; }

    [DataMember]
    public string Submitter { get; set; }

    [DataMember]
    public string Comment { get; set; }

    [DataMember]
    public DateTime TimeSubmitted { get; set; }
}

Et voici la partie pertinente de IEvalService:

[ServiceContract]
public interface IEvalService
{
 ...
   [OperationContract]
    [WebInvoke(RequestFormat=WebMessageFormat.Json,
       ResponseFormat=WebMessageFormat.Json, UriTemplate = "eval")]
    void SubmitEval(Eval eval);
}

Et EvalService:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
class EvalService : IEvalService
{
...
  public void SubmitEval(Eval eval)
    {
        eval.Id = Guid.NewGuid().ToString();
        Console.WriteLine("Received eval");
        evals.Add(eval);
    }
}

Dans un violon Demande du Constructeur, j'ai défini la Méthode de la POSTE et l'adresse de http://localhost:49444/EvalServiceSite/Eval.svc/eval. J'ai ajouté l'en-tête Content-Type: application/json; charset=utf-8 pour les en-têtes par défaut. Le corps de la requête est:

{"eval":{"Comment":"testComment222","Id":"doesntMatter", 
  "Submitter":"Tom","TimeSubmitted":"11/10/2011 4:00 PM"}}

La réponse que je reçois à partir de l'envoi de cette demande est 200, mais quand je regarde ensuite la est évaluée comme qui ont été enregistrées, celui que j'ai juste ajouté de la validité Id, mais Comment et Submitter sont tous deux nuls, et TimeSubmitted est 1/1/0001 12:00:00 AM.

Il semble que la WCF est l'obtention de la demande, mais ce n'est pas la désérialisation de l'objet correctement. Mais si c'est le cas, je ne sais pas pourquoi il est pas à jeter quelque sorte d'exception. Ça se sent que je suis en train de faire de ce droit, ou ai-je raté quelque chose?

Mise à JOUR: Voici le point de terminaison de déclaration en Application.config:

 <endpoint binding="webHttpBinding" behaviorConfiguration="webHttp"
   contract="EvalServiceLibrary.IEvalService" />

Et le point de terminaison du comportement visé:

<behavior name="webHttp">
  <webHttp defaultOutgoingResponseFormat="Json"/>
</behavior>

OriginalL'auteur Tom Hamming | 2011-11-10