如果我从Web服务中调用一个方法,我会得到一个System.ServiceModel.FaultException。我调用一个服务的两种方法,这里是两者的接口:
[OperationContract(IsOneWay = false, IsInitiating = true, IsTerminating = true)]
SaveResult CreateApprovalRequest(Guid requestId, Request request);
[OperationContract(IsOneWay = false, IsInitiating = true, IsTerminating = true)]
RequestSource GetRequestSource(Guid requestId, string source)
[OperationContract(IsOneWay = false, IsInitiating = true, IsTerminating = true)]
SaveResult CreateApprovalRequest(Guid requestId, Request request);
[OperationContract(IsOneWay = false, IsInitiating = true, IsTerminating = true)]
RequestSource GetRequestSource(Guid requestId, string source);
第一个方法调用成功,但第二个方法调用失败。两个方法都可以使用相同的连接客户端对象,但每个方法都应该单独运行。所以我将两者标记为Initiating and Terminating.
这里有什么问题?
如果你在某个地方添加到字典中,那么无论这是否合理,都有99%的几率会出现错误。
您可以通过打开跟踪、复制错误和检查日志来了解发生了什么。追踪提供了关于所发生事情的非常详细的逐步信息。
您可以将其添加到服务器上的web.config中,就在根config元素下。当然,您可以使用您想要的任何路径和文件名。
<configuration>
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.ServiceModel" switchValue="All" propagateActivity="true">
<listeners>
<add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="D:IISLogsWCFLogMyServerTrace.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
您可以在记事本或Visual Studio中查看日志,但服务跟踪查看器可能更容易。
要获得它,您需要下载Microsoft SDK(您的版本可能需要有所不同)。安装SDK后,程序将位于以下路径:
C: \Program Files\Microsoft SDK \Windows\v7.0A\bin\SvcTraceViewer.exe
必须在WCF服务器上进行调试。调试时有一条规则"不要想,看"。不要以为调试器会帮助你实际查看它
如果你没有调试,你认为与当前代码一致的dll可能不会与它一致。你可以使用Telerik Just Decompile来验证编译后的dll中的代码是否与你认为的完全相同。