检查是不是调用了 WCF 服务

Posted

技术标签:

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

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

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

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

【问题讨论】:

IIS 日志文件应该为您提供这方面的初始数据,support.microsoft.com/en-ca/help/943891/… 如果您想要更多,下面的答案提供了更多信息。 【参考方案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

【讨论】:

以上是关于检查是不是调用了 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章

快速WCF

在 WCF REST 服务中调用 WebGet 时出错

Wcf:可配置的服务调用方式

从 WCF 服务如何以当前用户而不是 IIS\DefaultApppool 的身份调用第三方 dll 中的方法

WCF 模拟不是模拟管理员

WCF 最大消息大小配额