使用Azure SDK for C++连接Azure Event Hub时遭遇‘Could not open Claims Based Security object’错误求助
Azure SDK for C++连接Azure Event Hub时遭遇‘Could not open Claims Based Security object’错误求助
大家好,我最近在尝试用Azure SDK for C++连接Azure Event Hub时卡壳了,一直抛出**"Could not open Claims Based Security object."**的错误,试了各种办法都没解决,来求助各位!
我是照着官方的生产事件示例来写的代码,逻辑非常简单,就是创建ProducerClient后调用GetEventHubProperties,但偏偏在这一步直接抛出异常:
Azure::Messaging::EventHubs::ProducerClient producerClient(connectionString, eventhubName); Azure::Messaging::EventHubs::Models::EventHubProperties eventhubProperties = producerClient.GetEventHubProperties();
我的Azure配置情况
我已经在Azure门户里完成了基础资源创建:
- 新建了资源组和Event Hubs命名空间
- 在命名空间下创建了名为
tolp-985-event-hub的Event Hub,也就是代码里的eventhubName
我尝试过的连接字符串组合
为了解决问题,我试了N种连接字符串的搭配,但全部失败:
- 从Event Hubs命名空间的「Shared Access Policies」→「RootManageSharedAccessKey」获取的主连接字符串
- 因为Event Hub本身的共享访问策略是空的,我专门新建了一个拥有
Manage+Send+Listen全权限的策略,用它的主连接字符串 - 试过带
EntityPath和不带EntityPath的连接字符串,也试过带EntityPath时把eventhubName留空的情况,各种组合都试过了,还是不行
环境排查尝试
为了排除本地环境的问题,我换了Azure SDK for C++里的存储Blob示例代码测试——创建Blob容器并上传内容,用存储账户的连接字符串完全正常,说明本地环境应该没问题。
不过注意到存储的连接字符串是DefaultEndpointsProtocol=https;AccountName=...这种格式,和Event Hub的Endpoint=sb://...格式差异很大,会不会这里有我没注意到的细节?
补充的测试代码和配置截图
后来我整理了更清晰的测试代码:
try { string connectionString = "Endpoint=sb://tolp-985-event-hubs-namespace.servicebus.windows.net/;SharedAccessKeyName=tolp-985-policy;SharedAccessKey=GGQyg...;EntityPath=tolp-985-event-hub"; string eventhubName = "tolp-985-event-hub"; Azure::Messaging::EventHubs::ProducerClient producerClient(connectionString, eventhubName); Azure::Messaging::EventHubs::Models::EventHubProperties eventhubProperties = producerClient.GetEventHubProperties(); } catch (std::exception &e) { std::cout << e.what() << std::endl; }
附上我的Azure资源配置截图:
- Event Hubs命名空间及对应Event Hub:

- 我在Event Hub上创建的共享访问策略:

我感觉肯定是漏了某个简单的配置或者细节,但实在想破头也找不到,有没有大佬能给点提示?
备注:内容来源于stack exchange,提问作者MartinD
相关产品推荐
相关产品推荐

