Web.configファイルを変更してエラーが発生した場合、標準の500-内部サーバーページのみが表示されます。
エラーページモードを詳細に設定しているのに、詳細なエラーメッセージが表示されません。これを並べ替えるにはどうすればよいですか?
その理由は、トレースを追加するためにWCFサービスに変更を加えたいのですが、500エラーが発生するため、この500エラーが何であるかを確認したいと思います。
Web.configファイルに次のものがあります。
<system.webServer>
<httpErrors errorMode="Detailed" />
...
</system.webServer>
<system.web>
<customErrors mode="Off" />
...
</system.web>
WCFトレースは、IIS Webサイトの通常のweb.config設定よりも構成が複雑になる可能性があります。
情報をクライアントに返す場合(開発でのみ行う必要があります)、includeExceptionDetailInFaults設定を試してください。
_ <system.serviceModel>
<serviceBehaviors>
<behavior name="metadataAndDebugEnabled">
<serviceDebug
includeExceptionDetailInFaults="true" />
<serviceMetadata
httpGetEnabled="true"
httpGetUrl="" />
</behavior>
</serviceBehaviors>
</system.serviceModel>
_
ただし、はるかに便利なツールは、Service TraceViewerアプリケーションで処理できるファイルへのトレースです。これは通常、Windows開発SDKがインストールされているマシンのC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\svctraceviewer.exe
にあります。
トレースの構成
http://msdn.Microsoft.com/en-us/library/ms733025.aspx
サービストレースビューアツール(SvcTraceViewer.exe)
http://msdn.Microsoft.com/en-us/library/ms732023.aspx
トランスポートレベルのアクティビティをログに記録できます。メッセージセキュリティがある場合は、メッセージアクティビティをログに記録できます。通常、それぞれに個別のファイルが作成されます。構成する1つの方法の例:
_<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には優れたフィルタリングがあります。例外は、左側のペインで赤で強調表示されて表示されます。例外をクリックすると、例外の詳細を見つけることができます。
machine.config ファイルでretail
モードオプションがtrue
に設定されていないことを確認してください。
これは次のようになります。
<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);
%>