【问题标题】:WCF write to IIS logs without blocking the requestWCF 写入 IIS 日志而不阻止请求
【发布时间】:2019-06-05 20:32:34
【问题描述】:

我有一个要求,我想根据当前请求记录 WCF 方法对 IIS 日志的响应。这目前已实现,但问题是我必须在将响应对象记录为 AppendToLog 之前对其进行序列化,因为 AppendToLog 方法只需要字符串输入参数,并且这种序列化需要大部分时间。这大大增加了整体响应时间。

我想了解在将响应返回给客户端后是否有任何方法可以进行此日志记录?我尝试在 return 语句之前异步执行此操作,但这不起作用,因为 Current Context 变为 null。

请告诉我如何解决这个问题?

【问题讨论】:

  • 你能考虑除内置以外的其他日志记录方法吗?
  • 您好 Opewix,目前我无法考虑其他日志记录方法。因为其他工具配置为仅读取 IIS 日志。

标签: c# asp.net .net wcf iis


【解决方案1】:

您能否克隆CurrentContext 对象,然后将克隆的副本传递给您引用的异步方法?或者将上下文对象中你想要的值放入单独的变量中,然后将这些变量直接传递给异步方法。

您肯定会想要进行负载测试...如果序列化花费的时间过长并且端点被调用过多,您的线程数可能会增长得相当多。

【讨论】:

  • 感谢您的回复。我使用当前上下文的唯一原因是使用 httpcontext.current.response appendtolog() api 将数据记录到 iis。我不认为我可以用克隆的上下文对象来做到这一点。
【解决方案2】:

一种选择是将 LogWriting 委托给应用程序中的不同线程。 通过这种方式,您可以将对象推送到 Logging Queue 并继续调用。

处理日志写入的线程可以按照自己的节奏追加到日志中。

【讨论】:

    猜你喜欢
    • 2017-12-11
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多