【问题标题】:Debug EF4 SaveChanges in WCF service hosted by IIS在 IIS 托管的 WCF 服务中调试 EF4 SaveChanges
【发布时间】:2012-06-07 04:33:11
【问题描述】:

在现有代码中,transactionEntities 的大小正在增长,而在我们得到的几乎最后的语句中

transactionEntities.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);

目前日志中没有异常,但显然出了点问题,因为没有记录最终消息(“Finished ....”)。其实这里有2个问题

  1. 有没有办法了解正在发生的事情
  2. 是否有可能以某种方式批量保存以模仿单个语句,因为 transactionEntities 无论如何都在不断增长。

将服务代码提取到控制台应用程序可能暂时解决问题(作为内部服务的一种方式触发,因此不需要此类服务),但不能解决现有服务的问题。

【问题讨论】:

    标签: wcf iis-7 entity-framework-4


    【解决方案1】:

    对于问题 #1 - 您可以打开 WCF 服务的诊断功能

    在您的网络(或应用)配置中:

    1) 在配置元素下的任意位置添加 System.Diagnostics 部分。您可以将路径替换为您希望存储文件的路径。

    <system.diagnostics>
        <sources>
          <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
            <listeners>
              <add type="System.Diagnostics.DefaultTraceListener" name="Default">
                <filter type="" />
              </add>
              <add name="ServiceModelMessageLoggingListener">
                <filter type="" />
              </add>
            </listeners>
          </source>
          <source name="System.ServiceModel" switchValue="Warning, ActivityTracing" propagateActivity="true">
            <listeners>
              <add type="System.Diagnostics.DefaultTraceListener" name="Default">
                <filter type="" />
              </add>
              <add name="ServiceModelTraceListener">
                <filter type="" />
              </add>
            </listeners>
          </source>
        </sources>
        <sharedListeners>
          <add initializeData="C:\temp\services_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelMessageLoggingListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
            <filter type="" />
          </add>
          <add initializeData="C:\temp\services_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
            <filter type="" />
          </add>
        </sharedListeners>
      </system.diagnostics>
    

    2) 在 system.ServiceModel 下添加以下内容:

    <diagnostics wmiProviderEnabled="false">
          <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
    </diagnostics>
    

    3) 在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ 下启动 SvcTraceViewer.exe。加载消息跟踪 (services_messages.svclog) 和服务跟踪日志 (services_tracelog.svclog)。您可以在工具中拖放文件或打开一个然后添加另一个

    4) 寻找问题的红色粗体字母。

    如果您想让编辑 WCF 配置的体验更令人满意,您可以使用与 SvcTraceViewer.exe (#3) 位于同一文件夹下的 SvcConfigEditor.exe。只需打开配置文件,您应该会看到 Diagnostics 文件夹,它允许您启动/停止和配置诊断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      相关资源
      最近更新 更多