我是第一次使用NServiceBus,并且有一个小型、简单的应用程序,其中用户提交一个表单,然后将表单字段发送到队列,处理程序收集这些数据并使用linq- to -sql将其写入数据库。
就数据库管理员而言,组件服务中的任何更改都是完全禁止的,因此我现在正在寻找DTC的替代方案(在DB服务器上没有启用),但是使用AsA_Server,这样消息就不会被清除。
我尝试在IConfigureThisEndpoint之后删除AsA_Server并自己指定配置,但似乎不起作用(控制台出现,页面加载,但什么也没有发生,甚至不会在断点处停止)。AsA_Client确实可以工作,但据我所知,消息将在启动时被清除,这是我需要避免的。
有什么建议吗?
谢谢,
OMK
EDIT:现在已经解决了这个问题,方法是在suppress transaction作用域中包装对数据库的调用,这允许在没有环境事务的情况下完成数据库工作:
using (TransactionScope sc = new TransactionScope(TransactionScopeOption.Suppress))
{
// code here
sc.Complete();
} 发布于 2011-09-19 20:25:46
当您使用As (AsA_Client,AsA_Server)接口时,将在Init()之后应用配置,因此您在其中所做的有关MsmqTransport和UnicastBus的所有设置都会被覆盖。
可以在IHandleProfile实现中使用IWantTheConfiguration覆盖这些设置。在应用默认角色之后,但在启动总线之前,您将获得配置。
通过这种方式,您可以更改默认的配置文件设置,并根据您的需要进行定制:停用事务,启用模拟...
示例:
public class DeactivateTransactions : IHandleProfile<Lite>, IWantTheEndpointConfig
{
private IConfigureThisEndpoint configure;
public IConfigureThisEndpoint Config
{
get { return configure; }
set
{
this.configure = value;
Configure.Instance.MsmqTransport()
.PurgeOnStartup(false)
.IsTransactional(false); // Or other changes
}
}
public void ProfileActivated()
{
}
}https://stackoverflow.com/questions/6748170
复制相似问题