Iis

IIS 中的 WCF 服務不起作用的詳細錯誤

  • August 21, 2014

如果我要更改 web.config 文件以使其包含錯誤,我只會看到標準的 500 - 內部伺服器頁面。

儘管將錯誤頁面模式設置為詳細,但我看不到詳細的錯誤消息。我該如何排序?

原因是我想對 WCF 服務進行更改以添加跟踪,但這會產生 500 錯誤,所以我想看看這個 500 錯誤是什麼。

我在 web.config 文件中有以下內容:

<system.webServer>
   <httpErrors errorMode="Detailed" />
...
</system.webServer>

<system.web>
   <customErrors mode="Off" />
...
</system.web>

配置 IIS 網站的正常 web.config 設置時,WCF 跟踪可能更複雜。

如果您希望將資訊返回給客戶端(僅應在開發中完成),請嘗試 includeExceptionDetailInFaults 設置:

 <system.serviceModel>
   <serviceBehaviors>
     <behavior name="metadataAndDebugEnabled">
       <serviceDebug
         includeExceptionDetailInFaults="true" />
       <serviceMetadata
         httpGetEnabled="true"
         httpGetUrl="" />
     </behavior>
   </serviceBehaviors>
 </system.serviceModel>

http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.includeexceptiondetailinfaults.aspx

但是,一個更有用的工具是跟踪到您可以使用服務跟踪查看器應用程序處理的文件。這通常位於:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\svctraceviewer.exe在您安裝了 Windows 開發 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 具有出色的過濾功能。例外在左側窗格中以紅色突出顯示。您可以點擊異常以查找異常詳細資訊。

在此處輸入圖像描述

引用自:https://serverfault.com/questions/472120