在IIS托管的WCF服务中调试EF4 SaveChanges

时间:2012-06-07 04:33:12

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

在现有代码中,transactionEntities的大小正在增长,并且在几乎最终的声明中我们已经有了

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

目前在日志中没有异常,但显然出现了问题,因为没有记录最终消息(“已完成......”)。实际上这里有两个问题

  1. 有没有办法了解正在发生的事情
  2. 是否有可能以某种方式分批保存模仿单一陈述,因为无论如何,transactionEntities仍在不断增长。
  3. 将服务代码提取到控制台应用程序中可能暂时解决问题(在内部作为单向服务触发,因此不需要这样的服务),但不能解决现有服务的问题。

1 个答案:

答案 0 :(得分:0)

对于问题#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 \ start SvcTraceViewer.exe下。加载消息跟踪(services_messages.svclog)和服务跟踪日志(services_tracelog.svclog)。您可以在工具中拖放文件或打开文件,然后添加另一个

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

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