J'ai un service WCF en place.
Dans le cadre d'un fonctionnement normal, le serveur effectue un traitement et renvoie un objet XactTaskIn rempli au client via un callback. J'ai réussi à faire fonctionner ce système.
Mon problème est que lorsque j'essaie de définir la variable returnData sur une XactException remplie et que j'essaie de renvoyer le XactTaskIn au client via le callback, j'obtiens l'exception suivante.
Exception - "Type 'XactException' avec nom du contrat de données XactException:http://schemas.datacontract.org/2004/07/' n'est pas attendu. Envisagez d'utiliser un DataContractResolver ou ajoutez tous les types non connus statiquement à la liste des types types connus - par exemple, en utilisant l'attribut KnownTypeAttribute ou en les en les ajoutant à la liste des types connus transmis à DataContractSerializer". (System.Runtime.Serialization.SerializationException) Exception Message = "Type 'XactException' avec nom du contrat de données XactException:http://schemas.datacontract.org/2004/07/' n'est pas attendu. Envisagez d'utiliser un DataContractResolver ou ajoutez tous les types non connus statiquement à la liste des types types connus - par exemple, en utilisant l'attribut KnownTypeAttribute ou en les en les ajoutant à la liste des types connus transmis à DataContractSerializer", Type d'exception = "System.Runtime.Serialization.SerializationException".
Voici la classe XactTaskIn
[DataContract]
public class XactTaskIn
{
[DataMember]
public DateTime timeOut;
[DataMember]
public DateTime timeIn;
[DataMember]
public string name;
[DataMember]
public string responseTo;
[DataMember]
public String moduleFromName;
[DataMember]
public String moduleFromType;
[DataMember]
public String methodFromName;
[DataMember]
public object[] originalInputs;
[DataMember]
public String returnMethodToCall;
[DataMember]
public String returnModuleToCall;
[DataMember]
public object returnData;
public XactTaskIn(DateTime timeOut, DateTime timeIn, string name, string responseTo, String moduleFromName, String moduleFromType, String methodFromName, object[] originalInputs, String returnMethodToCall, String returnModuleToCall, object returnData)
{
this.timeOut = timeOut;
this.timeIn = timeIn;
this.name = name;
this.responseTo = responseTo;
this.moduleFromName = moduleFromName;
this.moduleFromType = moduleFromType;
this.methodFromName = methodFromName;
this.originalInputs = originalInputs;
this.returnMethodToCall = returnMethodToCall;
this.returnModuleToCall = returnModuleToCall;
this.returnData = returnData;
}
}
Voici la classe XactException :
[DataContract]
public class XactException
{
[DataMember]
string message;
public XactException(string message)
{
this.message = message;
// Add implementation.
}
}
Mise à jour :
Ok, le commentaire de Daniel m'a aidé.
Il semble maintenant que le serveur envoie le callback au client, mais que le client lève l'exception suivante.
- Attrapé : "Le formateur a lancé une exception en essayant de désérialiser le message : Il y a eu une erreur pendant que en essayant de désérialiser le paramètre http://tempuri.org/:taskIn . Le message InnerException est "Error in ligne 1 position 960. Élément http://schemas.datacontract.org/2004/07/:returnData' contient des données provenant d'un type qui correspond au le nom http://schemas.datacontract.org/2004/07/:XactException'. Le désérialiseur n'a pas connaissance aucun type correspondant à ce nom. Envisagez d'utiliser un DataContractResolver ou ajoutez le type correspondant à correspondant à 'XactException' dans la liste des types connus - par exemple, en utilisant la classe attribut KnownTypeAttribute ou en l'ajoutant à la liste des types connus transmis à DataContractSerializer". Pour plus de détails, voir InnerException. détails." (System.ServiceModel.Dispatcher.NetDispatcherFaultException) Exception Message = "The formatter threw an exception en essayant de désérialiser le message : There was an error while en essayant de désérialiser le paramètre http://tempuri.org/:taskIn . Le message InnerException était 'Error in ligne 1 position 960. Élément http://schemas.datacontract.org/2004/07/:returnData contient des données provenant d'un type qui correspond au le nom http://schemas.datacontract.org/2004/07/:XactException'. Le désérialiseur n'a aucune connaissance de aucun type correspondant à ce nom. Envisagez d'utiliser un DataContractResolver ou ajoutez le type correspondant à correspondant à 'XactException' dans la liste des types connus - par exemple, en utilisant l'attribut attribut KnownTypeAttribute ou en l'ajoutant à la liste des types connus transmis à DataContractSerializer'. Veuillez consulter InnerException pour plus détails.", Exception Type = "System.ServiceModel.Dispatcher.NetDispatcherFaultException"