c# - 使用 Azure 服务总线的 NamespaceManager 时出现 ConfigurationManager 错误

标签 c# azure azureservicebus servicebus

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

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: Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified. File name: 'System.Configuration.ConfigurationManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' at Microsoft.ServiceBus.Messaging.Configuration.KeyValueConfigurationManager.CreateNameValueCollectionFromConnectionString(String connectionString) at Microsoft.ServiceBus.Messaging.Configuration.KeyValueConfigurationManager.Initialize(String connection, Nullable`1 transportType) at Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(String connectionString)

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

我做错了什么吗?

最佳答案

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

Please note that this package requires .Net Framework 4.5.2 Full Profile.

如果你想在.net core平台创建队列。我建议你最好使用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

关于c# - 使用 Azure 服务总线的 NamespaceManager 时出现 ConfigurationManager 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49765338/

相关文章:

Azure 服务总线 - 锁定持续时间和重复,它们有何关系?

c# - Visual Studio 2017 抛出异常中断(也处理异常)

c# - [DataContract] 类中的代码

c# - 如何调整图表的大小超过屏幕分辨率?

azure - OneDrive for Business API 发现和授权问题

google-app-engine - 如何使用 REST API 从 Java/GAE 向 Azure 通知中心发送消息

Azure Powershell 函数使用推送输出绑定(bind)附加到 Blob

当 Web 应用程序扩展到更少的实例时,Azure 服务总线消息

azure - HTTP 请求/服务总线 - application/x-www-form-urlencoded 不支持错误

c# - ListView删除刷新不起作用?