2010-09-27 17 views
7

Có cách nào để xem ai sử dụng dịch vụ web của tôi và cách anh ấy sử dụng dịch vụ web của mình không? Có hệ thống khai thác gỗ nào không?Cách xem ai đang sử dụng dịch vụ web của tôi

Người tiêu dùng của tôi không chắc chắn liệu anh ấy có được kết nối với dịch vụ web của tôi hay không và tôi cũng không thể thấy điều đó.

+1

Bạn đang sử dụng WCF? –

Trả lời

5

Bạn có thể sử dụng một thư viện khai thác gỗ như log4net hoặc một trong enterprise library

Nếu dịch vụ của bạn là một dịch vụ WCF, thêm một hành vi hoạt động cho phép bạn thực hiện một số hành động mỗi khi một hoạt động được gọi

internal class OperationLoggerBehavior : IOperationBehavior 
{ 
    public void AddBindingParameters(OperationDescription operationDescription, System.ServiceModel.Channels.BindingParameterCollection bindingParameters) 
    { 
    } 

    public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation) 
    { 
    } 

    public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation) 
    { 
     dispatchOperation.ParameterInspectors.Add(new OperationLogger()); 
    } 

    public void Validate(OperationDescription operationDescription) 
    { 
    } 
} 

internal class OperationLoggerAttribute : Attribute, IContractBehavior 
{ 
    public void AddBindingParameters(ContractDescription contractDescription, ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) 
    { 
    } 

    public void ApplyClientBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, ClientRuntime clientRuntime) 
    { 
    } 

    public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime) 
    { 
     foreach (OperationDescription operationDescription in contractDescription.Operations) 
     { 
      if (!operationDescription.Behaviors.Contains(typeof(OperationLoggerBehavior))) 
      { 
       operationDescription.Behaviors.Add(new OperationLoggerBehavior()); 
      } 
     } 
    } 

    public void Validate(ContractDescription contractDescription, ServiceEndpoint endpoint) 
    { 
    } 
} 


internal class OperationLogger : IParameterInspector 
{ 
    /// <summary> 
    /// Called before an operation is invoked. 
    /// </summary> 
    /// <param name="operationName"></param> 
    /// <param name="inputs"></param> 
    /// <returns></returns> 
    public object BeforeCall(string operationName, object[] inputs) 
    { 
     // Write to log  
    } 

    /// <summary> 
    /// Called after an operation has been invoked. 
    /// </summary> 
    /// <param name="operationName"></param> 
    /// <param name="outputs"></param> 
    /// <param name="returnValue"></param> 
    /// <param name="correlationState"></param> 
    public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState) 
    { 
     // Write to log  
    } 
} 




// Service contract implementation  
[OperationLogger] 
[ServiceBehaviorAttribute(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)] 
public partial class MyService : IMyService 
{ 
    ... 
} 
1

Bạn có thể sử dụng công cụ như Wireshark để xem chính xác những thông điệp mà dịch vụ của bạn đang nhận.

Thật tuyệt khi thêm đăng nhập vào để xem chính xác dịch vụ của bạn đang làm gì với thư, giống như Log4Net rất tốt.

Nếu không có cả hai thiết lập này, bạn sẽ không chắc chắn những gì đang diễn ra.

Các vấn đề liên quan