2010-09-27 9 views
7

Gibt es eine Möglichkeit zu sehen, wer meinen Web-Service verbraucht und wie er es nutzt? Gibt es ein Protokollierungssystem dafür?Wie zu sehen, wer meinen Webservice konsumiert

Mein Kunde ist nicht sicher, ob er mit meinem Web-Service verbunden ist oder nicht, und das kann ich auch nicht sehen.

+1

Verwenden Sie WCF? –

Antwort

5

können Sie eine Logging-Bibliothek wie log4net verwenden oder die eine in der enterprise library

Wenn Ihr Dienst ein WCF-Dienst ist, das Hinzufügen eines Betriebsverhalten können Sie einige Aktion jedes Mal eine Operation auszuführen aufgerufen

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

Sie können ein Tool wie Wireshark verwenden, um genau zu sehen, welche Nachrichten Ihr Dienst empfängt.

Es ist gut, Protokollierung hinzuzufügen, um genau zu sehen, was Ihr Dienst mit den Nachrichten macht, etwas wie Log4Net ist sehr gut.

Ohne diese beiden Einstellungen werden Sie nicht sicher sein, was vor sich geht.

Verwandte Themen