Изменить строку подключения на основе TransactionScope в проекте WCF (baseHttpBinding)
Во всем приложении используйте статический класс tConfig.ConnectionString
скачать необходимую строку подключения. К сожалению, мне нужно иметь возможность изменять соединение в зависимости от того, является ли ссылка на TransactionScope
, В настоящее время у меня есть этот кусок кода, но статический класс вызывает меня ошибка Stackru. Пожалуйста, помогите реализовать функциональность в этом классе статического (или какое-то лучшее решение).
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 ответ
Я думаю, что это плохая идея использовать трансдакции таким образом. Когда транзакция завершится? в вашем коде нет вызовов Complete или RollBack. Объем каждого вызова будет разным из-за разных потоков каждого вызова.
смотрите эту ссылку. Описывает подход к использованию trasactions на уровне wcf. В этой ситуации клиент может создать и завершить объем транзакции.