0

wcf アプリケーションのエスカレーション分散トランザクションに問題があります。

私のコードは次のようになります:

ログリポジトリ

    public void AddLog(ImportLogDbo log)
    {
        using (DbManager dbManager = new DbManager("controlServerConnectionString"))
        {
            dbManager.SetSpCommand("dbo.ImportLog_Create",
                                   dbManager.Parameter("@ImportFile", log.ImportFile),
                                   dbManager.Parameter("@ImportError", log.ImportError),
                                   dbManager.Parameter("@ImportHash", log.ImportHash),
                                   dbManager.Parameter("@ImportCompleted", log.ImportCompleted))
             .ExecuteNonQuery();
        }
    }

LogService

    public void AddImportLog(string ImportFile, string ImportHash)
    {
        ImportLogDbo importLogDbo = new ImportLogDbo
        {
            ImportCompleted = false,
            ImportFile = ImportFile,
            ImportHash = ImportHash                
        };


        if (_importLogRepository.GetByFileName(ImportFile) == null)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                _importLogRepository.AddLog(importLogDbo);
                scope.Complete();
            }
        }

    }

プロジェクトは.NET 4にあり、Sql Server 2008R2を使用しています

上記のコードは、このように構成されている私の wcf サービスを呼び出します

  <wsHttpBinding>
    <binding name="wsHttpBinding" transactionFlow="True" maxReceivedMessageSize="2147483647" closeTimeout="5:00:00" openTimeout="5:00:00" receiveTimeout="5:00:00" />          
  </wsHttpBinding>

<endpoint address="http://localhost:8080/AppServer/WsDocumentImportService" binding="wsHttpBinding" name="wsBinding" contract="ComDocs.AppServerServiceLibary.Abstract.IDocumentImportService"/>

私の問題はトランザクション スコープにあり、これは常に配布されたものとして宣伝されます。

私は何か間違ったことをしていますか?(私はwcfサービスプログラミングに少し慣れていません)

ありがとう

4

1 に答える 1

0

transactionFlow = “true” は、トランザクションをサービス境界の外に伝播します。false に設定してみてください。属性を使用して設定できる、より詳細なトランザクション スコープが必要です。詳細については、以下をご覧ください。

http://msdn.microsoft.com/en-us/magazine/cc163432.aspx

于 2011-08-24T14:23:23.877 に答える