2

我在集成了 AppPool 的 Windows Server 2012 R2 上的 IIS 8.5 中运行了 WCF 服务。

我在服务器中打开 url:http://localhost:50123/MyService.svc

我有HTTP 500 内部服务器错误。(IExplorer 无法显示页面)

我在事件日志、IIS 日志中没有发现问题。

我应用此步骤:https ://peter.hahndorf.eu/blog/iislogging.html

Disable IE “Friendly HTTP error messages”

<customErrors mode=”Off” />

<httpErrors errorMode="Detailed" />

<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>

我使用 WCF 跟踪,但没有查看错误消息。

<system.diagnostics>
    <sources>
      <source name="System.ServiceModel" propagateActivity="true" switchValue="All">
        <listeners>
          <add name="xmlTraceListener" />
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging" switchValue="All">
        <listeners>
          <add name="xmlTraceListener" />
        </listeners>
      </source>
      <source name="System.Net">
        <listeners>
          <add name="System.Net" />
        </listeners>
      </source>
      <source name="System.Net.HttpListener">
        <listeners>
          <add name="System.Net" />
        </listeners>
      </source>
      <source name="System.Net.Sockets">
        <listeners>
          <add name="System.Net" />
        </listeners>
      </source>
      <source name="System.Net.Cache">
        <listeners>
          <add name="System.Net" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="xmlTraceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="C:\Servitelco\Logs\IntegrationLabor\ServiceWcf.svclog" />
      <add name="System.Net" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\Servitelco\Logs\IntegrationLabor\SystemNet.trace.log" traceOutputOptions="DateTime" />
    </sharedListeners>
    <switches>
      <add name="System.Net" value="Verbose" />
      <add name="System.Net.Sockets" value="Verbose" />
      <add name="System.Net.Cache" value="Verbose" />
      <add name="System.Net.HttpListener" value="Verbose" />
    </switches>
  </system.diagnostics>


 <system.serviceModel>

        <diagnostics>
            <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxSizeOfMessageToLog="26214445" />
        </diagnostics>

我为所有内容、详细错误日志记录、400-600 范围内的 HTTP 错误设置了“失败的请求跟踪”。

我从%systemdrive%\inetpub\logs\FailedReqLogFiles\W3SVC1打开 fr000001.xml 文件

我只查看 MODULE_SET_RESPONSE_ERROR_STATUS 警告:

ModuleName ManagedPipelineHandler
Notification 128 HttpStatus
500
HttpReason Internal Server Error
HttpSubStatus 0 ErrorCode 0
ConfigExceptionInfo
Notification EXECUTE_REQUEST_HANDLER
ErrorCode 操作成功完成。(0x0)

错误 500:

HttpStatus 500
HttpReason 内部服务器错误

并成功?

ErrorCode 操作成功完成。(0x0)

没有关于错误的更多信息。

关于错误:

我有 IDispatchMessageInspector 和 WCF Inspector

喜欢https://patrickdesjardins.com/blog/wcf-inspector-for-logging

错误与属性有关logFileName="c:\log.txt"

如果路径存在,则一切正常。如果路径不存在,我会收到 Http 500 错误。

 <extensions>
            <behaviorExtensions>
                <add name="myLogBehavior"
                     type="MyServiceA.LogFileBehaviorExtensionElement, MyServiceA" />
            </behaviorExtensions>
        </extensions>


  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <MyLogFileBehavior logFileName="C:\Servitelco\Logsxxx\IntegrationLabor\log.txt" />
    </behavior>
  </serviceBehaviors>

<endpointBehaviors>
          <behavior name="behavior1">
              <myLogBehavior logFileName="c:\log.txt" />
          </behavior>
      </endpointBehaviors>

这意味着代码中有一个未经处理的异常。

事件查看器、IIS 日志、WCF 跟踪、失败的请求跟踪未显示错误消息,为什么?如何获得完整的错误信息?操作系统无论如何都没有记录错误?

4

1 回答 1

0

我遇到了同样的问题 - 向客户端返回 500 错误,没有事件日志错误,没有从 Global.asax 记录自定义错误,失败的请求跟踪显示 ManagedPipelineHandler 的 MODULE_SET_RESPONSE_ERROR_STATUS 警告。

通过在控制器的最高级别添加 Try/Catch 来解决...

    <HttpPost>
    Public Function Main() As IHttpActionResult
    Try
       ... all logic here...
       Return ResponseMessage(New HttpResponseMessage(HttpStatusCode.OK))
    Catch Ex As Exception
       Errorcl.HandleException(err) 'internal logging of error
       Return ResponseMessage(New HttpResponseMessage(HttpStatusCode.InternalServerError))
    End Try
于 2019-07-09T04:45:41.320 回答