我们有一些代码,看起来有点像这个(错误处理和其他的东西去掉)应该ServiceBroker对话是一个交易
using (var tran = conn.BeginTransaction())
{
var client = new Service(...);
var dialog = client.GetConversation(null, conn, tran);
var response = dialog.Receive();
// do stuff with response, including database work
dialog.Send(message, conn, tran);
dialog.EndConversation(conn, tran);
tran.Commit();
conn.Close();
}
里面我们已经继承了这个代码,并没有在ServiceBroker专家,将如果我们将交谈移到交易之外,就会出现问题:
var client = new Service(...);
var dialog = client.GetConversation(null, conn, tran);
var response = dialog.Receive();
using (var tran = conn.BeginTransaction())
{
// do stuff with response, including database work
tran.Commit();
}
dialog.Send(message, conn, tran);
dialog.EndConversation(conn, tran);
conn.Close();
刚刚将conn.Close()移至底部 – Argos