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"
, Просто убери пробел и ты золотой.