【问题标题】:How to see who consumes my webservice如何查看谁在使用我的网络服务
【发布时间】:2010-09-27 10:38:28
【问题描述】:

有什么方法可以查看谁在使用我的网络服务以及他如何使用它?有记录系统吗?

我的消费者不确定他是否连接到我的网络服务,我也看不到。

【问题讨论】:

    标签: c# .net web-services


    【解决方案1】:

    您可以使用诸如log4net 或enterprise library 中的日志库

    如果您的服务是 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
    {
        ...
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用Wireshark 之类的工具来准确查看您的服务正在接收哪些消息。

      最好添加日志记录以准确查看您的服务对消息所做的工作,Log4Net 之类的内容非常好。

      如果没有这两种设置,您将无法确定发生了什么。

      【讨论】:

        猜你喜欢
        • 2018-06-09
        • 2015-03-06
        • 1970-01-01
        • 2012-10-11
        • 2019-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多