簡體   English   中英

為 Azure 服務總線使用 NamespaceManager 時出現 ConfigurationManager 錯誤

[英]Getting ConfigurationManager error when using NamespaceManager for Azure Service Bus

我有一個簡單的 class,我想用它在我的 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);
        }            
    }
}

一切都已設置並且似乎正常工作,我在我的 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”。 該系統找不到指定的文件。 文件名: 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)

我覺得我瘋了,因為這應該是如此簡單,但它似乎正在嘗試訪問配置文件,但它不能。 但我已經將連接字符串傳遞給它,所以我不確定為什么要這樣做。

難道我做錯了什么?

我假設您正在使用WindowsAzure.ServiceBus庫。 與.net核心平台不兼容

請注意,此程序包需要.Net Framework 4.5.2完整配置文件。

如果要在.net核心平台中創建隊列。 我建議您最好使用管理庫,或者等到NamespaceManager的替代軟件包推出為止。

當前, 替換包未發布 ,有關詳細信息,您可以參考此SO線程 有關如何使用管理庫的更多詳細信息,可以參考另一個SO線程

以下是管理庫的演示代碼。

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()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM