【问题标题】:Checking if a WCF service is called检查是否调用了 WCF 服务
【发布时间】:2020-05-03 05:07:17
【问题描述】:

我使用 C# 构建了一个 WCF 服务,该服务在 Windows Server 2016 上运行。

我需要知道何时从客户端调用此 WCF,以及调用它的人(例如 IP)

有没有办法做到这一点? 我试图检查事件查看器和 IIS,但不知道如何。 谢谢,

【问题讨论】:

标签: c# wcf iis


【解决方案1】:

您确实应该使用某种日志框架(Log4Net、NLog、MS 企业库记录器...),

这将允许您登录到文本文件、电子邮件、事件日志或数据库,然后您将能够首先记录您的代码引发的任何错误/异常,以便您可以调查和解决错误,以及您然后还可以包含信息/详细级别的日志条目,如您所说,如果您愿意并需要这样做,则可以捕获调用方 IP 和时间戳以及调用参数。

【讨论】:

  • 另见IServiceBehavior Interface。如果您将日志记录框架与此结合,您将拥有一个 WCF 扩展,允许您在不修改原始服务的情况下记录对任何 WCF 服务的访问。
【解决方案2】:

记录每个请求是您能做的最好的事情。如果您想知道如何在 WCF 中获取客户端 ip,下面的方法将适合您。然后您可以记录该 ip、请求时间等。

public string GetClientIp()
{
  OperationContext operationContext = OperationContext.Current;
  MessageProperties messageProps = operationContext.IncomingMessageProperties;
  RemoteEndpointMessageProperty endpointProps = (RemoteEndpointMessageProperty)messageProps[RemoteEndpointMessageProperty.Name];

  return endpointProps.Address;
}

【讨论】:

    【解决方案3】:

    您可以使用system.diagnostics 配置尝试现有的Log WCF Service Calls with Parameter information 日志记录

    或为IOperationInvoker 创建自定义实现,例如这里Log WCF Service Calls with Parameter information

    【讨论】:

      猜你喜欢
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多