我想了解是否有更好的方法可以使用WCF以自定义方式进行日志记录或错误处理
以下是该方案。 我有以下服务
namespace IntegrationServices.Contract.SomeServices
{
[ServiceContract(Name = "SomeServices")]
public interface ISomeService
{
//Having 30+ contracts below is one of them
[OperationContract]
[WebInvoke(UriTemplate = "/GetOnlineSomething")]
SomeTransactionResponse GetOnlineSomething(string someNumber);
}
}
由calss
实现namespace IntegrationServices.Service.PaymentServices
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
[GlobalErrorBehaviorAttribute(typeof(GlobalErrorHandler), Project.Name)]
public class PaymentService : ISomeService
{
public OnlinePaymentTransactionResponse GetOnlinePaymentTransaction(string someNumber)
{
//we have authentication code here which is OK
//Logging the request
_transactionKey = Guid.NewGuid();
TransactionRequest(/*some message and some parameter*/);
try
{
//do something
}
catch (Exception ex)
{
LogHelper.WriteErrorLogAsync(/*logging some more information*/);
response.ErrorMessage = Project.PHAPICommonErrorMessage;
}
//Logging the response
TransactionResponse(/*some parameter and error message from catch block*/);
return response;
}
}
}
记录功能如下
private void TransactionRequest(string xmlObject, Guid? groupKey, string name)
{
//writing to DB
}
private void TransactionResponse(string xmlObject, Guid? groupKey, string name)
{
//writing to DB
}
现在我的问题是,我必须在所有30多个函数中编写日志请求和响应,如上所述。 任何人都可以帮助我如何改进以上或需要重新设计整个方法。
答案 0 :(得分:0)
使用PostSharp登录我的代码库,我取得了很大的成功。在WCF的上下文中,它类似于Aleksey L建议的IServiceBehavior方法,它为您提供了在方法执行之前和之后执行的“挂钩”,您可以在其中添加日志记录。这样做的好处在于您还可以在WCF调用的上下文之外使用PostSharp日志记录属性。