【问题标题】:Getting ConfigurationManager error when using NamespaceManager for Azure Service Bus将 NamespaceManager 用于 Azure 服务总线时出现 ConfigurationManager 错误
【发布时间】:2018-04-11 01:58:51
【问题描述】:

我有一个简单的类,我想用它在我的 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);
        }            
    }
}

一切都设置好了,似乎工作正常,我在我的启动中注册了服务,我的连接字符串很好,作为服务总线连接字符串:

Endpoint=sb://myservicebus.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abcdefg12345

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

System.IO.FileNotFoundException:无法加载文件或程序集“System.Configuration.ConfigurationManager,版本=0.0.0.0,文化=中性,PublicKeyToken=cc7b13ffcd2ddd51”。该系统找不到指定的文件。 文件名:'System.Configuration.ConfigurationManager,版本=0.0.0.0,文化=中性,PublicKeyToken=cc7b13ffcd2ddd51' 在 Microsoft.ServiceBus.Messaging.Configuration.KeyValueConfigurationManager.CreateNameValueCollectionFromConnectionString(字符串连接字符串) 在 Microsoft.ServiceBus.Messaging.Configuration.KeyValueConfigurationManager.Initialize(字符串连接,Nullable`1 传输类型) 在 Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(String connectionString)

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

我做错了吗?

【问题讨论】:

  • NamespaceManager 类属于Microsoft.ServiceBus 包。但是您的错误与 System.Configuration.ConfigurationManager 有关。你确定你已经添加了 System.Configuration 引用吗?

标签: c# azure azureservicebus servicebus


【解决方案1】:

我假设您正在使用WindowsAzure.ServiceBus 库。它与 .net core 平台不兼容。

请注意,此软件包需要 .Net Framework 4.5.2 Full Profile。

如果你想在.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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2021-01-24
    相关资源
    最近更新 更多