使用NamespaceManager for Azure Service Bus时出现ConfigurationManager错误

时间:2018-04-11 01:58:52

标签: c# azure azureservicebus servicebus

我有一个简单的类,我想用它在Azure服务总线命名空间上创建一个队列。这是我的班级:

public class ServiceBusPublisher
{
    private readonly string _connString;        

    public ServiceBusPublisher(IConfiguration config)
    {
        _connString = config.GetSection("ServiceBus:Endpoint").Value;
    }

    public void CreateQueue(string queueName)
    {
        var namespaceManager = NamespaceManager.CreateFromConnectionString(_connString);

        if (!namespaceManager.QueueExists(queueName))
        {
            namespaceManager.CreateQueue(queueName);
        }            
    }
}

一切都已设置好,似乎正在运行,我在我的Startup中注册了服务,我的连接字符串很好,作为服务总线连接字符串:

  

端点= SB://myservicebus.servicebus.windows.net/; SharedAccessKeyName = RootManageSharedAccessKey; SharedAccessKey = abcdefg12345

但是当它试图调用NamespaceManager.CreateFromConnectionString(_connString)时,我得到了这个异常

  

System.IO.FileNotFoundException:无法加载文件或程序集'System.Configuration.ConfigurationManager,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51'。该系统找不到指定的文件。   文件名:'System.Configuration.ConfigurationManager,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51'      at Microsoft.ServiceBus.Messaging.Configuration.KeyValueConfigurationManager.CreateNameValueCollectionFromConnectionString(String connectionString)      在Microsoft.ServiceBus.Messaging.Configuration.KeyValueConfigurationManager.Initialize(String connection,Nullable`1 transportType)      在Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(String connectionString)

我觉得我很疯狂,因为这应该是如此简单,但似乎它正在尝试访问配置文件,但它不能。但是我已经把连接字符串传递给了它,所以我不确定为什么会这样做。

我做错了吗?

1 个答案:

答案 0 :(得分:2)

我假设您使用的是WindowsAzure.ServiceBus库。 与.net核心平台不兼容。

  

请注意,此软件包需要.Net Framework 4.5.2完整配置文件。

如果要在.net核心平台中创建队列。我建议您最好使用Management library或等到NamespaceManager的替换包已经用完。

目前,未发布替换套件,有关详细信息,请参阅此SO thread。有关如何使用管理库的更多详细信息,您可以参考另一个SO thread

以下是管理库的演示代码。

var credentials = SdkContext.AzureCredentialsFactory.FromFile(@"auth file path");
var azure = Azure
           .Configure()
           .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
           .Authenticate(credentials)
           .WithDefaultSubscription();
var sbNameSpace = "service bus namespace";
var resoureGroup = "resource group";
var servicebus = azure.ServiceBusNamespaces.GetByResourceGroup(resoureGroup, sbNameSpace);
var queue = servicebus.Queues.Define("queuename").Create()

enter image description here