我有一个WCF服务,它在Windows Server 2012 R2上的IIS 8.5中与AppPool集成在一起运行。
我在服务器中打开网址: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
通知128
HttpStatus 500
HttpReason内部服务器错误
HttpSubStatus 0 错误代码0
ConfigExceptionInfo
通知EXECUTE_REQUEST_HANDLER
ErrorCode操作成功完成。 (0x0)
错误500:
HttpStatus 500
HttpReason内部服务器错误
成功吗?
ErrorCode操作成功完成。 (0x0)
没有有关该错误的更多信息。
关于错误:
我有IDispatchMessageInspector和WCF检查器
像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跟踪,失败的请求跟踪未显示错误消息,为什么?如何获取完整的错误消息?操作系统无论如何都不会记录错误?
答案 0 :(得分:0)
我遇到了同样的问题-向客户端返回500错误,没有事件日志错误,没有从Global.asax记录任何自定义错误,失败的请求跟踪显示MODULE_SET_RESPONSE_ERROR_STATUS对ManagedPipelineHandler的警告。
通过在控制器的最高级别添加“尝试/捕获”来解决...
<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