J'essaie de créer un service WCF, mais j'ai rencontré un problème de blocage. J'ai fait du googling mais je n'ai pas réussi à progresser. J'espère avoir plus de chance ici.Sérialisation du service WCF: Le désérialiseur n'a aucune connaissance d'aucun type qui correspond à ce nom
Disons que j'ai une classe d'emploi défini comme tel:
[DataContract]
public class Job : IJob
{
public Job(...)
{
}
[DataMember]
public string Example
{
get { return m_example; }
set { m_example = value; }
}
}
Maintenant, ce que je fais est quelque chose comme ça
public void DoSomething()
{
ExampleServiceProxy.ExampleClient proxy = new ExampleServiceProxy.ExampleClient();
proxy.DoSomething(job);
}
A l'intérieur de mes Reference.cs J'ai ajouté quelques ServiceKnownTypeAttribute comme suit:
...
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(Job))]
void DoSomething(object job);
Mon code de service est le suivant:
[ServiceContract]
public interface IExample
{
[OperationContract]
void DoSomething(IJob);
}
public class Example : IExample
{
public void DoSomething(IJob job)
{
...
}
}
Ai-je besoin de mettre un peu plus loin ServiceKnownTypeAttributes quelque part? Ai-je besoin de réimplémenter l'objet du côté service?
J'ai essayé de le faire plus tôt, mais j'ai une erreur qui introduirait une dépendance circulaire. C'est parce que Job.cs est dans une autre assemblée et je devrais l'inclure dans le projet WCF (je pense). – PolandSpring
OK. Vous n'avez pas d'autre choix que de refactoriser vos bibliothèques pour supprimer les dépendances circulaires. Avoir les définitions ServiceContract, IJob et Job dans une seule librairie. Ensuite, avoir l'implémentation du serveur dans un autre exécutable ou une bibliothèque, et le client dans un autre exécutable. Lorsque vous programmez en WCF, vous vous êtes habitué à créer beaucoup de bibliothèques. –
Merci, je l'ai fait et ça a bien fonctionné. – PolandSpring