TypeInitializationException при установке ServicePointManager.ServerCertificateValidationCallback с отключенной трассировкой

Я получаю необработанный TypeInitializationException исключение, когда я пытаюсь установить

ServicePointManager.ServerCertificateValidationCallback += (a, b, c, d) => true;

Исключение происходит, когда я получаю следующее (взято из MSDN) в моем app.config. Единственное отличие от конфигурации ниже и то, что на MSDN заключается в том, что я установил логирование для System.Net, System.Net.Cache, System.Net.Sockets а также System.Net.WebSockets в Off, Я вижу проблему только тогда, когда все четыре выключены.

Что-то не так с этой конфигурацией или я что-то упускаю?

<system.diagnostics>
  <sources>
    <source name="System.Net" tracemode="includehex" maxdatasize="1024">
      <listeners>
        <add name="System.Net"/>
      </listeners>
    </source>
    <source name="System.Net.Cache">
      <listeners>
        <add name="System.Net"/>
      </listeners>
    </source>
    <source name="System.Net.Http">
      <listeners>
        <add name="System.Net "/>
      </listeners>
    </source>
    <source name="System.Net.Sockets">
      <listeners>
        <add name="System.Net"/>
      </listeners>
    </source>
    <source name="System.Net.WebSockets">
      <listeners>
        <add name="System.Net"/>
      </listeners>
    </source>
  </sources>
  <switches>
    <add name="System.Net" value="Off"/>
    <add name="System.Net.Cache" value="Off"/>
    <add name="System.Net.Http" value="Verbose"/>
    <add name="System.Net.Sockets" value="Off"/>
    <add name="System.Net.WebSockets" value="Off"/>
  </switches>
  <sharedListeners>
    <add name="System.Net"
         type="System.Diagnostics.TextWriterTraceListener"
         initializeData="network.log"
    />
  </sharedListeners>
  <trace autoflush="true"/>
</system.diagnostics>

Вот дорожка стека исключения

at System.Net.ServicePointManager.get_ServerCertificateValidationCallback()
at test.Program.Main(String[] args) in c:\Users\Eoin\Documents\Visual Studio 2013\Projects\test\test\Program.cs:line 12
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

Существует внутреннее исключение, также типа TypeInitializationException, и стек вызовов содержит только at System.Net.ServicePointManager..cctor() и сообщение "Инициализатор типа для" System.Net.ComNetOS "вызвал исключение".

Это последнее внутреннее исключение типа ConfigurationErrorsException, Сообщение "Слушатель System.Net" не существует в разделе sharedListeners ". и трассировка стека

at System.Diagnostics.ListenerElement.GetRuntimeObject()
at System.Diagnostics.ListenerElementsCollection.GetRuntimeObject()
at System.Diagnostics.TraceSource.Initialize()
at System.Net.Logging.InitializeLogging()
at System.Net.Logging.get_On()
at System.Net.ComNetOS..cctor()

1 ответ

Решение

В имени слушателя есть пробел для System.Net.Http.

<source name="System.Net.Http">
  <listeners>
    <add name="System.Net "/>
  </listeners>
</source>

Это попытается найти слушателя по имени "System.Net " но, конечно, у вас есть только один по имени "System.Net", Просто убери пробел и ты золотой.

Другие вопросы по тегам