【问题标题】:Service method called twice服务方法调用了两次
【发布时间】:2023-03-28 07:00:01
【问题描述】:

我已经使用 wcf 创建了一个休息服务。 我正在服务方法中编写实体框架代码以从数据库中获取数据。

来自浏览器的每个调用都会两次或三次访问服务方法。 我在方法中没有发现异常。我之前遇到过同样的问题并解决了它为所有模型添加 DataContract 属性(现在没有帮助)。

可能的原因是什么?请帮忙。

问候 阿什什

【问题讨论】:

标签: .net wcf entity-framework rest wcf-data-services


【解决方案1】:

跟踪 Web 服务是起点。

1.- 在 WCF 项目的 web.config 中添加以下内容:

<system.diagnostics>
<trace autoflush="true">
</trace>
<sources>
    <source name="System.ServiceModel"
            switchValue="Information, ActivityTracing"
            propagateActivity="true">
        <listeners>
            <add name="sdt"
                 type="System.Diagnostics.XmlWriterTraceListener"
                 initializeData="WcfDetailTrace.e2e" />
        </listeners>
    </source>
</sources>

然后执行您的服务并检查项目文件夹中文件“WcfDetaiTrace.e2e”的内容,它是一个 XML 文件。这样,您将很容易发现您的服务有什么问题。主要问题涉及:

  1. 缺少 DataContracts/KnownTypes
  2. DateTime 序列化异常(溢出)
  3. 使用错误的动词访问 REST 条目(GET 但应该是 POST、PUT 或 DELETE)

希望对你有帮助。

【讨论】:

  • 太棒了。确实有帮助,否则你根本不知道,WTH 惹麻烦了。
  • 我感兴趣的是:当序列化出现问题时,为什么要第二次调用该方法?我看不到执行代码两次的好处。另外:是否可以禁用该行为,以便在序列化失败时立即抛出错误而不是执行该方法两次?
【解决方案2】:

有时序列化数据合约会出错,这就是它两次调用相同方法的原因。请检查您的数据合同类是否存在重复属性或任何其他问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多