我得到了一个FaultException;具有相同关键字的项目已经存在”;

本文关键字:关键字 项目 存在 FaultException 一个 | 更新日期: 2023-09-27 18:23:43

如果我从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.

这里有什么问题?

我得到了一个FaultException;具有相同关键字的项目已经存在”;

如果你在某个地方添加到字典中,那么无论这是否合理,都有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:'IISLogs'WCFLog'MyServerTrace.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中的代码是否与你认为的完全相同。