gpt4 book ai didi

c# - 如何查看谁使用了我的网络服务

转载 作者:太空狗 更新时间:2023-10-29 20:25:47 25 4
gpt4 key购买 nike

有什么方法可以查看谁使用了我的网络服务以及他如何使用它?是否有相应的日志系统?

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

最佳答案

您可以使用日志库,例如 log4netenterprise 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
{
...
}

关于c# - 如何查看谁使用了我的网络服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3803023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com