Yerinde bir WCF servisim var.Beklenmeyen Tür - Serileştirme İstisnası
Normal işlem, sunucunun bir geri çağrılma yoluyla istemciye bir XactTaskIn nesnesinin döndürülmesi işlemesini gerçekleştirdiğini görecektir. Bunu iyi çalışıyorum.
Sorunum, returnData değişkenini popüle edilmiş bir XactException olarak ayarlamaya çalıştığımda ve XactTaskIn'ı geri arama aracılığıyla istemciye geri göndermeyi denediğimde, şu istisnayı attığım durumudur.
İstisna - veri sözleşme adı 'XactException: http: //schemas.datacontract.org/2004/07/' ile "Tür 'XactException'. beklenmemektedir bir DataContractResolver kullanmayı düşünün veya herhangi eklemek türleri, bilinen türden bilinen türleri için bilinmemektedir - örneğin, KnownTypeAttribute özniteliği kullanılarak veya tarafından, DataContractSerializer'a aktarılan bilinen türler listesine eklenir. " (System.Runtime.Serialization.SerializationException) İstisna İleti veri sözleşme adı 'XactException: http: //schemas.datacontract.org/2004/07/' ile = "Tip 'XactException'. beklenmemektedir kullanmayı düşünün DataContractSerializer geçirilen bilinen türleri listesine ekleyerek tarafından KnownTypeAttribute özelliği veya kullanılarak örneğin ", İstisna Tipi = - bir DataContractResolver veya bilinen türleri listesine statik olarak bilinmemektedir herhangi türlerini ekleyin. "System.Runtime.Serialization.SerializationException"
İşte XactException sınıfı İşte XactTaskIn sınıf
[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;
}
}
olduğu:
[DataContract]
public class XactException
{
[DataMember]
string message;
public XactException(string message)
{
this.message = message;
// Add implementation.
}
}
Güncelleme: Daniel dan açıklama bana çok yardımcı oldu böylece
Ok.
Sunucu artık geri çağrıyı istemciye gönderiyor gibi görünüyor, ancak istemci aşağıdaki özel durumu seçiyor.
- yakalandı: " mesaj serisini isterken biçimlendirici bir istisna attı: parametreyi http://tempuri.org/:taskIn serisini çalışılırken bir hata oluştu InnerException mesajı ' hattı 1 pozisyon hatası oldu 960. Öğe 'http://schemas.datacontract.org/2004/07/:returnData' , adresinin 'http://schemas.datacontract.org/2004/07/ adresindeki verileri içerir: XactException '. Desperizatörün hiçbir bilgisi yoktur.Bu adada eşlenen herhangi bir tür. bir DataContractResolver kullanılarak göz önünde ya da bilinen türleri listesine 'XactException' ye karşılık gelen tipi ekleyin -., Örneğin, DataContractSerializer geçirilir bilinen tipte listesine eklemeden KnownTypeAttribute niteliğini kullanarak veya tarafından' . daha detaylar için InnerException bakınız " (System.ServiceModel.Dispatcher.NetDispatcherFaultException) İstisna İleti =" biçimlendirici bir istisna attı mesaj serisini çalışırken. parametreyi serisini çalışılırken bir hata oluştu http://tempuri.org/:taskIn. InnerException mesajı 'Hata hattı 1 pozisyon içinde 960. Eleman 'http://schemas.datacontract.org/2004/07/:returnData http' Adını için eşleştiren bir tip verileri içeren' idi: //schemas.datacontract.org/2004/07/:XactException'. Ayırıcı, bu adada eşlenen herhangi bir tür bilgisine sahip değildir. bir DataContractResolver kullanılarak göz önünde ya da bilinen türleri listesine 'XactException' ye karşılık gelen tipi ekleyin -., Örneğin, DataContractSerializer geçirilir bilinen tipte listesine eklemeden KnownTypeAttribute niteliğini kullanarak veya tarafından' . daha detaylar için InnerException bakın. ", İstisna Türü = "System.ServiceModel.Dispatcher.NetDispatcherFaultException"
İstisna halinde açıklanan "KnownTypeAttribute" kullanmayı deneyin. –
@Daniel - Özniteliği nereye koyayım? – user589195
@ user589195: "XactException" sınıfı üzerinde varsayalım. –