我用&#34得到了一个FaultException;一个具有相同密钥的项目已经存在"

时间:2015-11-21 17:19:23

标签: c# wcf

如果我从我的webservice调用一个方法,我得到一个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.

这里有什么问题?

1 个答案:

答案 0 :(得分:0)

如果您要在某处添加字典,那么错误发生的概率为99%,无论是否有意义。

您可以通过启用跟踪,复制错误和检查日志来了解正在发生的事情。跟踪提供了有关发生的事情的非常详细的逐步信息。

将此添加到服务器上的web.config,位于root配置元素下。当然,您可以使用您想要的任何路径和文件名。

<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中查看日志,但Chapter of Hadley Wickham's book on S4 objects可能更容易。

要获得它,您需要下载Service Trace Viewer(您的版本可能需要更改)。安装SDK后,程序将位于以下路径:

  

C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ SvcTraceViewer.exe

您必须在WCF服务器上进行调试。调试中有一个规则,不要想。看&#34 ;.不要假设任何东西,但调试器会帮助你真正看到它。

如果你没有调试,那么你认为的dll与当前的代码一起可能不符合它。您可以使用Microsoft SDK来验证已编译的dll中的代码是否与您认为的完全相同。