[英]How to see who consumes my webservice
有沒有辦法查看誰在使用我的Web服務以及他如何使用它? 是否有一個日志記錄系統?
我的消費者不確定他是否已連接到我的Web服務,我也看不到。
如果您的服務是WCF服務,則添加操作行為可以使您在每次調用操作時執行一些操作
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
{
...
}
您可以使用Wireshark之類的工具來確切查看您的服務正在接收什么消息。
添加日志記錄以准確查看您的服務正在處理消息是一件好事,例如Log4Net就是很好。
沒有這兩種設置,您將無法確定發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.