0

ASP .Net Web サイトから呼び出される WCF Web サービスがあります。私の Web メソッドでは、クライアント Web サイトで例外を処理する必要があるため、意図的に例外をキャッチしません。Web サービスは純粋に内部アプリケーションであり、呼び出し元が例外を処理することを期待する標準ライブラリのように動作するようにしたいと考えています。サービス web.config に includeExceptionDetailInFaults="true" があります。サービスが例外をスローすると、次のエラーが発生します。

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)

クライアントがサービスによってスローされた例外をキャッチできるように、これを修正するにはどうすればよいですか?

4

1 に答える 1

0

問題の原因を突き止めました。Web サービス内のワーカー スレッド (System.Threading.ThreadPool.QueueUserWorkItem) で例外がスローされていたため、もちろん処理されていませんでした。例外ハンドラーを追加し、ワーカー スレッドにログを記録することで修正されました。

于 2012-05-24T09:23:33.930 に答える