Если бы я изменил файл web.config, чтобы в нем были ошибки, я бы увидел только стандартную страницу 500 - Internal Server Page.
Несмотря на то, что для параметра «Страницы ошибок» установлено значение «Подробный», я не вижу подробного сообщения об ошибке. Как мне это отсортировать?
Причина в том, что я хочу внести изменения в службу WCF, чтобы добавить трассировку, но это дает ошибку 500, поэтому я хочу увидеть, что это за ошибка 500.
У меня в файле web.config есть следующее:
<system.webServer>
<httpErrors errorMode="Detailed" />
...
</system.webServer>
<system.web>
<customErrors mode="Off" />
...
</system.web>
Трассировка WCF может быть более сложной для настройки, чем обычные параметры web.config для веб-сайта IIS.
Если вы хотите, чтобы информация возвращалась клиенту (что должно выполняться только при разработке), попробуйте параметр includeExceptionDetailInFaults:
<system.serviceModel>
<serviceBehaviors>
<behavior name="metadataAndDebugEnabled">
<serviceDebug
includeExceptionDetailInFaults="true" />
<serviceMetadata
httpGetEnabled="true"
httpGetUrl="" />
</behavior>
</serviceBehaviors>
</system.serviceModel>
Однако гораздо более полезным инструментом является трассировка до файла, который можно обработать с помощью приложения Service Trace Viewer. Обычно он находится по адресу: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\svctraceviewer.exe
на вашем компьютере, на котором установлен ваш Windows Development SDK.
Настройка трассировки
http://msdn.microsoft.com/en-us/library/ms733025.aspx
Средство просмотра служебной трассировки (SvcTraceViewer.exe)
http://msdn.microsoft.com/en-us/library/ms732023.aspx
Вы можете регистрировать активность транспортного уровня и, если у вас есть безопасность сообщений, активность сообщений. Обычно для каждого создается отдельный файл. Пример одного способа настройки:
<system.diagnostics>
<sources>
<!-- NOTE: change to switchValue="Warning" for production -->
<!--source name="System.ServiceModel" switchValue="Warning" propagateActivity="true"-->
<source name="System.ServiceModel" switchValue="Warning, ActivityTracing" propagateActivity="true">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type=""/>
</add>
<add name="ServiceModelTraceListener">
<filter type=""/>
</add>
</listeners>
</source>
<!-- NOTE: change to switchValue="Warning" for production -->
<source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type=""/>
</add>
<add name="ServiceModelMessageLoggingListener">
<filter type=""/>
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="C:\logs\app_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
<filter type=""/>
</add>
<add initializeData="C:\logs\app_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
<filter type=""/>
</add>
</sharedListeners>
</system.diagnostics>
Если все настроено правильно, файлы будут созданы. Когда возникает исключение, вы можете скопировать файл на компьютер, где установлен svctraceviewer, и открыть его. Обычно вы можете перейти к дате и времени, когда возникла проблема, и найти ее. Если вы просматриваете много действий, svctraceviewer имеет отличную фильтрацию. Исключения выделяются красным цветом на левой панели. Вы можете щелкнуть исключение, чтобы найти подробную информацию об исключении.
Убедитесь, что retail
опция режима не установлена на true
в machine.config файл.
Это выглядело бы примерно так:
<configuration>
<system.web>
<deployment retail=”true”/>
</system.web>
</configuration>
Если для него установлено значение true, отладка и отслеживание запросов будут отключены, а пользовательские ошибки всегда включены. Установите значение false.
Чтобы получить путь к файлу machine.config, который используется средой выполнения, распечатайте его в ASP.NET следующим образом:
<%
string machineConfPath =
System.Runtime.InteropServices.RuntimeEnvironment.SystemConfigurationFile;
Response.Write("System configuration file: {0}", machineConfPath);
%>