簡體   English   中英

SignalR背板不適用於NLog配置(客戶端無法重新連接)

[英]SignalR Backplane not working with NLog configuration (Clients cannot reconnect)

我們已經創建了帶有SQL背板的服務器。 最近,我們發現此問題導致w3wp.exe大量使用線程。 遍歷整個代碼庫后,我們可以縮小原因與NLog的關系。

通過在Web配置文件中進行以下配置,我們已經配置了NLog。

<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
  </configSections>
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd">
    <targets async="true">

      <target name="file" xsi:type="File" fileName="${basedir}/Logs/${shortdate}_printcloud.log" archiveFileName="${basedir}/Logs/ArchiveAuto/{#}_printcloud.log" archiveDateFormat="yyyy-MM-dd" archiveAboveSize="50000000" archiveEvery="Day" archiveNumbering="DateAndSequence" maxArchiveFiles="14" archiveOldFileOnStartup="false" createDirs="true" layout="${longdate} ${uppercase:${level}}  ${logger} ${message} (${callsite:includSourcePath=true}) ${exception:format=tostring}" />

    </targets>
    <rules>
     <logger name="PrintCloud.*" minlevel="Trace" maxlevel="Error" writeTo="file" />-->

    </rules>
  </nlog>
<configuration>

在集線器內部,我們使用了如下所示的記錄器。

public class ConnectorHub : Hub
{
    private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

    public void Connect(string message)
    {
        logger.Debug("Connection Recieved");
        (new SignalRHubHelper()).SendConnectRecieved(Context.ConnectionId);
    }
}

當我們在啟用這些配置的情況下運行背板時,當客戶端嘗試重新連接時,我們將面臨大量線程使用的問題。 但是,如果我們從Web配置文件中注釋掉NLog配置代碼,則背板可以正常工作。 使用背板時,有沒有人遇到過類似的行為? 這種行為可能是什么原因?

SignalR versoin-2.2.2 NLog版本-4.4.9

編輯1

當我們從webconfig禁用信號跟蹤跟蹤時,似乎沒有發生此問題。 我們已經使用NLog.NLogTraceListener記錄信號跟蹤。

  <system.diagnostics>
    <sources>
      <source name="SignalR.SqlMessageBus">
        <listeners>
          <add name="traces" />
        </listeners>
      </source>
      <source name="SignalR.ServiceBusMessageBus">
        <listeners>
          <add name="traces" />
        </listeners>
      </source>
      <source name="SignalR.RedisMessageBus">
        <listeners>
          <add name="traces" />
        </listeners>
      </source>
      <source name="SignalR.ScaleoutMessageBus">
        <listeners>
          <add name="traces" />
        </listeners>
      </source>
      <source name="SignalR.Transports.WebSocketTransport">
        <listeners>
          <add name="traces" />
        </listeners>
      </source>
      <source name="SignalR.Transports.ServerSentEventsTransport">
        <listeners>
          <add name="traces" />
        </listeners>
      </source>
      <source name="SignalR.Transports.ForeverFrameTransport">
        <listeners>
          <add name="traces" />
        </listeners>
      </source>
      <source name="SignalR.Transports.LongPollingTransport">
        <listeners>
          <add name="traces" />
        </listeners>
      </source>
      <source name="SignalR.Transports.TransportHeartBeat">
        <listeners>
          <add name="traces" />
        </listeners>
      </source>
      <source name="SignalR.ReflectedHubDescriptorProvider">
        <listeners>
          <add name="traces" />
        </listeners>
      </source>
    </sources>
     <!--Sets the trace verbosity level--> 
    <switches>
      <add name="SignalRSwitch" value="Verbose" />
    </switches>
    <sharedListeners>

     <add name="traces" type="NLog.NLogTraceListener, NLog" />
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>

與其使用NLog.NLogTraceListener而不是使用System.Diagnostics.TextWriterTraceListener似乎也沒有出現任何問題。

認為問題是這樣的:

autoflush=true

這將導致NLogTraceListener變為瘋子並為每個跟蹤事件執行刷新。 通過使用線程池線程刷新所有已注冊的NLog目標。

如果需要autoflush=true ,請考慮通過向偵聽器添加disableFlush屬性來禁用autoflush=true刷新:

<add name="traces" type="NLog.NLogTraceListener, NLog" disableFlush="true" />

好奇為什么NLog Wiki建議啟用autoflush=true而不添加以下重要屬性:

https://github.com/NLog/NLog/wiki/NLog-Trace-Listener-for-System-Diagnostics-Trace

更新 NLog 4.5現在默認使用disableFlush=true 另請參見https://github.com/NLog/NLog/pull/2407

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM