我有一个简单的类,我想用它在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)
我觉得我很疯狂,因为这应该是如此简单,但似乎它正在尝试访问配置文件,但它不能。但是我已经把连接字符串传递给了它,所以我不确定为什么会这样做。
我做错了吗?
答案 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()