私は、その後の行動を使用してサービスを実装例外WCF、IErrorHandlerとlog4netの
[AttributeUsage(AttributeTargets.Class)]
public class AErrorHandlerBehaviorAttribute : Attribute, IServiceBehavior, IErrorHandler{
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
protected Type ServiceType { get; set; }
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
//Dont do anything
}
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection <ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
//dont do anything
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
ServiceType = serviceDescription.ServiceType;
foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers)
{
dispatcher.ErrorHandlers.Add(this);
}
}
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
fault = null; //Suppress any faults in contract
}
public bool HandleError(Exception error)
{
log.Error("Page Load failed : " + error.Message);
return false;
}
}
をログに記録するようにlog4netのを使用するWCFサービス上で動作エラー処理を実装しようとしています。私は
[AErrorHandlerBehavior]
public class AService : IAService
{
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
....//various methods
}
しかしサービス内アイログ変数を宣言する場合、これはアイログ変数は、ロギングが動作しなくなったと宣言されていない場合、正常に動作します。
[AErrorHandlerBehavior]
public class AService : IAService
{
//private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
....//various methods
}
理想的には私は、それがすでに動作中で宣言されている場合は特に、私が作るすべてのサービスにアイログ変数を宣言する必要がありますする必要はありません。
誰かがa)行動とサービスの両方でこれを宣言しなければならない理由を説明してください。 b)二重宣言を避ける方法またはc)wcfへのよりよいログイン方法。
Andras、返信いただきありがとうございます。私はサービス記述を得る方法を見て苦労しています。これをどうやって取得するのかについてのポインターがあります。私が実際にやっていることは、エラーがスローされる最初の場所を得ることです。私は、これはエラーが動作にスローされているログを記録すると、これは少し難しいかもしれないと感じている。どちらが当然意味がありますが、私が欲しいものではない – KiwiInLondon
実際に私は少し太くなっていましたが、朝早く少し早くなければなりません。今私はserviceDescriptionパラメータを参照してください。眼鏡をかけなければならない。ご協力いただきありがとうございます – KiwiInLondon