2012-05-24 30 views
0

我有一個ASP.net網站調用的WCF Web服務。在我的web方法中,我故意不捕捉異常,因爲我希望它們能夠由客戶端網站處理。 Web服務純粹是一個內部應用程序,我希望它的行爲像一個標準庫,它希望調用者處理異常。我在服務web.config中有includeExceptionDetailInFaults =「true」。當我的服務拋出一個異常,我得到這個錯誤:如何解決'System.ServiceModel.ExceptionDetail'未標記爲可序列化

Log Name:  Application 
Source:  ASP.NET 2.0.50727.0 
Date:   24/05/2012 09:13:52 
Event ID:  1334 
Task Category: None 
Level:   Error 
Keywords:  Classic 
User:   N/A 
Description: 
An unhandled exception occurred and the process was terminated. 

Application ID: DefaultDomain 

Process ID: 2628 

Exception: System.Runtime.Serialization.SerializationException 

Message: Type 'System.ServiceModel.ExceptionDetail' in Assembly 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable. 

StackTrace: at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) 
    at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) 
    at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() 
    at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) 
    at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) 
    at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) 
    at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) 
    at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) 
    at System.Runtime.Remoting.Channels.CrossAppDomainSerializer.SerializeObject(Object obj, MemoryStream stm) 
    at System.AppDomain.Serialize(Object o) 
    at System.AppDomain.MarshalObject(Object o) 

如何解決這個問題,所以我的客戶能夠趕上由服務引發的異常?

+1

我認爲你仍然需要捕捉異常,但是在將它們發送回客戶端時將它們包含在錯誤中。 請參閱:http://msdn.microsoft.com/en-us/library/ms752208.aspx – Davio

回答

0

我發現問題的原因 - 異常是在我的Web服務中的工作線程(System.Threading.ThreadPool.QueueUserWorkItem)中引發的,所以當然沒有被處理。通過添加異常處理程序並記錄到工作線程來修復。

+1

它解決了您的特定情況,但您不期望的任何其他異常都可能導致相同的問題。 –

相關問題