在Web服务的交互过程中,可能会遇到安全验证相关的错误。这类错误通常表现为接收到一个未加密或错误加密的故障信息。具体的错误信息可能如下所示:
[MessageSecurityException: 从对方接收到一个未加密或错误加密的故障。这个故障可能是对一个未正确加密的请求的响应。请查看内部FaultException以获取故障代码和详细信息。]
内部异常显示如下:
消息中至少有一个安全令牌无法验证。
这个错误信息并没有提供足够的信息来定位问题,但至少知道存在一个安全问题。为了排查这个问题,首先需要在Web服务上启用日志记录。可以通过在web.config文件中的system.serviceModel节点添加以下诊断设置来启用传输级别的消息日志记录:
<system.serviceModel>
<diagnostics>
<messageLogging maxMessagesToLog="25000" logEntireMessage="true" logMessagesAtServiceLevel="false" logMalformedMessages="true" logMessagesAtTransportLevel="true">
<filters>
<clear/>
</filters>
</messageLogging>
</diagnostics>
</system.serviceModel>
接下来,需要创建一个文件,以便可以使用Microsoft Trace Viewer打开它。为此,需要在system.diagnostic节点下添加以下设置(注意日志文件的名称和位置):
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Warning, ActivityTracing" propagateActivity="true">
<listeners>
<add name="xml"/>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging" switchValue="Warning">
<listeners>
<add name="xml"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="C:\Temp\myService.svclog"/>
</sharedListeners>
</system.diagnostics>