【发布时间】:2017-07-07 10:50:05
【问题描述】:
我有一个 wcf api 并希望将所有请求包装在一个事务中
目前我的代码在每个端点中都是这样的
public MyCompleteList ReadOrganisations()
{
MyCompleteList resp = new MyCompleteList ();
try
{
using (TransactionScope scope = new TransactionScope())
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
DC_Base browser_request = new DC_Base(PROJECT);
browser_request.cmd_user_id = coreDb.GetUserIDFromLoginName(PROJECT,
HttpContext.Current.User.Identity.Name);
resp =
new MyCompleteList (coreSc.User_Read_All_Organisations(browser_request, utils,
validation, coreSc, coreDb));
scope.Complete();
}
else
{
resp.SetResponseNotLoggedIn();
}
}
}
catch (TransactionAbortedException ex)
{
resp.SetResponseServerError();
}
catch (ApplicationException ex)
{
resp.SetResponseServerError();
}
return resp;
}
如您所见,如果我要在每个端点(大约 300 个)中使用“使用”事务范围部分,这将是很多重复的代码。
有没有办法减少重复的数量?
【问题讨论】:
-
是的,创建一个父类,把你的代码移进去。
-
你是什么意思?您能否提供更多详细信息,目前此 wcf 服务从接口继承到基类,然后再到顶级类添加父类是什么意思?这些函数由外部客户端调用,也就是通过 json
-
你的问题不是很清楚——“使用”是如何导致代码重复的?
-
如果我想在来自客户端的每个端点调用中使用一个事务,那么我需要在每个重复的端点中使用 (....) 示例只是其中之一我们的 api 提供的许多端点
-
另外,请不要对 SQL Server 使用 SERIALIZABLE 事务。将 TransactionScope 更改为 READ COMMITTED。见blogs.msdn.microsoft.com/dbrowne/2010/06/03/…
标签: c# sql sql-server wcf transactions