2013-10-02 1 views
1

Для всего приложения используйте статический класс tConfig.ConnectionString для загрузки необходимой строки подключения. К сожалению, мне нужно иметь возможность изменять соединение в зависимости от того, относится ли ссылка к TransactionScope. В настоящее время у меня есть эта часть кода, но статический класс вызывает мне ошибку StackOverflow. Помогите реализовать функциональность в этом классе static (или какое-то лучшее решение).Изменить строку соединения на основе TransactionScope в проекте WCF (baseHttpBinding)

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(); 
      } 
     } 
    } 
} 
+1

Почему вы используете transactionScope для выбора операции? – Vasiliy

+0

Это только пример. Я использую его для AddObject и обновляю –

ответ

0

Я думаю, что это плохая идея использовать трансграничные действия таким образом. Когда транзакция завершается? в вашем коде нет полного или RollBack-вызова. Объем для каждого вызова будет отличаться из-за разных потоков каждого вызова.

см. this link. В нем описывается подход к использованию trasactions на уровне wcf. В этой ситуации клиент может создавать и заполнять область транзакции.