C# 从连接字符串创建ASB MessagingFactory并提供设置

C# 从连接字符串创建ASB MessagingFactory并提供设置,c#,.net,azureservicebus,C#,.net,Azureservicebus,我想从连接字符串创建Azure Service BusMessagingFactory实例,并指定BatchFlushInterval设置 MessagingFactory上接受连接字符串的工厂方法不接受MessagingFactorySettings实例 MessagingFactory上接受MessagingFactorySettings实例的工厂方法不接受连接字符串 最接近我的是: var connectionStringBuilder=new ServiceBusConnectionS

我想从连接字符串创建Azure Service Bus
MessagingFactory
实例,并指定
BatchFlushInterval
设置

MessagingFactory
上接受连接字符串的工厂方法不接受
MessagingFactorySettings
实例

MessagingFactory
上接受
MessagingFactorySettings
实例的工厂方法不接受连接字符串

最接近我的是:


var connectionStringBuilder=new ServiceBusConnectionStringBuilder(connectionString);
var messagingSettings=新MessagingFactorySettings
{
TokenProvider=TokenProvider.CreateSharedSecretTokenProvider(connectionStringBuilder.SharedSecretIsUserName,connectionStringBuilder.SharedSecretIsUserSecret),
NetMessagingTransportSettings=
{

BatchFlushInterval=TimeSpan.FromMillicles(100)/我发现的方法是使用命名空间管理器中的令牌提供程序。因此:

var namespaceMngr = NamespaceManager.CreateFromConnectionString(namespaceConnString);
MessagingFactorySettings mfs = new MessagingFactorySettings();
mfs.TokenProvider = namespaceMngr.Settings.TokenProvider;
mfs.NetMessagingTransportSettings.BatchFlushInterval = TimeSpan.FromSeconds(timeToFlush);
MessagingFactory mf = MessagingFactory.Create(namespaceMngr.Address, mfs);

如果您试图设置
AmqpTransportSettings.BatchFlushInterval
而不是
NetMessagingTransportSettings.BatchFlushInterval
,那么我帮不了您,实际上我无意中发现了这篇文章,正在寻找答案。试图更改
AmqpTransportSettings.BatchFlushInterval
似乎不符合de>MessageFactory
即使
MessageFactorySettings
反映了更改。

JordanSchillers answer修复了令牌提供程序问题,但我的地址现在使用的是端口9355而不是9354

最后,我混合使用ServiceBusConnectionStringBuilder和NamespaceManager:

        var serviceBusConnectionString = new ServiceBusConnectionStringBuilder(connection.ConnectionString);
        MessagingFactorySettings factorySettings = new MessagingFactorySettings();
        factorySettings.TransportType = serviceBusConnectionString.TransportType;
        //Use the  namespacemanager to create the token provider.
        var namespaceManager = NamespaceManager.CreateFromConnectionString(connection.ConnectionString);
        factorySettings.TokenProvider = namespaceManager.Settings.TokenProvider;
        factorySettings.NetMessagingTransportSettings.BatchFlushInterval = TimeSpan.FromMilliseconds(batchTimeInMs);

        MessagingFactory factory = MessagingFactory.Create(serviceBusConnectionString.Endpoints, factorySettings);
        return factory.CreateTopicClient(topicName);

我认为你做得对。在创建
MessagingFactory
之后,你不能修改
MessagingFactory设置。你找到了这样做的方法吗?我也在努力解决同样的问题。不,这似乎是不可能的。但我从那时起就没有看过,所以你永远不知道。这很有效,但似乎有令人讨厌的副作用检查namespaceMngr.Address是否具有端口9355,而不是使用TopicClient.CreateFromConnectionString()获得的9354。