检查是不是调用了 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 服务的主要内容,如果未能解决你的问题,请参考以下文章