1

アプリケーション全体で、静的クラスを使用しtConfig.ConnectionStringて必要な接続文字列をダウンロードします。残念ながら、参照先がTransactionScope. 現在、私はこのコードを持っていますが、静的クラスは私を StackOverflow エラーと呼んでいます。このクラス static (またはより良い解決策) で機能を実装するのを手伝ってください。

public static class tConfig
{   
    public static string ConnectionString
    {
        get {
            if (System.Transactions.Transaction.Current != null)
                return "ConnectionString with scope";
            else
                return "ConnectionString without scope";
        }
    }
}

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    string GetData;

    [OperationContract]
    string GetDataWithScope;
}


public class MyService : IMyService
{
    public string GetData
    {
        using (var context = new MyEntities(tConfig.ConnectionString)
        {
            return context.table1.where(x=>x.ID == 1).Select(x=> x.F_NAME).FirstOrDefault().ToString();
        }
    }

    public string GetDataWithScope
    {
        using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(600)))
        {
            using (var context = new MyEntities(tConfig.ConnectionString)
            {
                return context.table1.where(x=>x.ID == 1).Select(x=> x.F_NAME).FirstOrDefault().ToString();
            }
        }
    }
}
4

1 に答える 1

0

このようにトランスダクションを使用するのは悪い考えだと思います。取引が完了するのはいつですか?あなたのコードには Complete または RollBack 呼び出しはありません。各呼び出しのスレッドが異なるため、すべての呼び出しのスコープは異なります。

このリンクを参照してください。wcf レベルでトランザクションを使用する方法について説明します。この状況では、クライアントはトランザクション スコープを作成して完了することができます。

于 2013-10-02T12:40:19.863 に答える