我正在尝试从我的Azure移动服务中的API函数发送serviceBusQueue消息,即使它成功创建了queueService并且队列存在,我也会遇到令人讨厌的异常。我是怎么解决这个问题的?
我附上了发送代码和堆栈跟踪。
function sendBusMessage(request, params, message, success)
{
console.log(params);
var queueService = azure.createServiceBusService(params.namespace,params.key);
console.log(queueService);
if (queueService)
{
queueService.sendQueueMessage('worker', message, function (error)
{
if (!error)
{
success();
}
else
{
request.respond(statusCodes.INTERNAL_SERVER_ERROR,error);
}
});
}
}
异常堆栈:
发生未处理的异常。 TypeError:无法将属性'body'设置为null 在ServiceClient._performRequest.self._buildRequestOptions.operation(D:\ home \ site \ wwwroot \ node_modules \ azure \ lib \ services \ core \ serviceclient.js:210:34) 在ServiceClient._performRequest(D:\ home \ site \ wwwroot \ node_modules \ azure \ lib \ services \ core \ serviceclient.js:264:7) 在ServiceBusService.ServiceClient._initDefaultFilter.filter(D:\ home \ site \ wwwroot \ node_modules \ azure \ lib \ services \ core \ serviceclient.js:534:7) 在ServiceClient._performRequest(D:\ home \ site \ wwwroot \ node_modules \ azure \ lib \ services \ core \ serviceclient.js:261:10) 在ServiceBusServiceClient._buildRequestOptions(D:\ home \ site \ wwwroot \ node_modules \ azure \ lib \ services \ core \ servicebusserviceclient.js:107:5) 在Wrap.signRequest(D:\ home \ site \ wwwroot \ node_modules \ azure \ lib \ services \ serviceBus \ wrap.js:69:5) 在WrapTokenManager.getAccessToken(D:\ home \ site \ wwwroot \ node_modules \ azure \ lib \ services \ serviceBus \ wraptokenmanager.js:76:5) 在WrapService.wrapAccessToken.finalCallback(D:\ home \ site \ wwwroot \ node_modules \ azure \ lib \ services \ serviceBus \ wrapservice.js:98:7) 在ServiceClient._initDefaultFilter.filter(D:\ home \ site \ wwwroot \ node_modules \ azure \ lib \ services \ core \ serviceclient.js:538:11) 在WrapService.wrapAccessToken.processResponseCallback(D:\ home \ site \ wwwroot \ node_modules \ azure \ lib \ services \ serviceBus \ wrapservice.js:101:5)
答案 0 :(得分:2)
用于配置Node.js的namespace
是Service Bus
标签下可见的access key
(非常简单)。
不幸的是,它很容易与为特定消息传递功能实例(例如队列)定义的访问密钥混淆。提供无效的访问密钥可能会导致类似于相关的堆栈跟踪。
应该用于配置Node.js的Connection Information
是可以从Service Bus
窗口访问的Connection Information
。要实现这一目标,您需要导航到Default Key
主标签(带有云图标的标签),然后点击底部栏提供的DEFAULT ISSUER
按钮。它是namespace
部分正下方的access key
。
azure.createServiceBusService()
和AZURE_SERVICEBUS_NAMESPACE
都可以直接传递给AZURE_SERVICEBUS_ACCESS_KEY
功能,或者(通过配置移动服务时)通过app settings
和{{1}}键设置在{{1}}配置部分。
答案 1 :(得分:0)
确保使用Service Bus->命名空间中的顶级配置,而不是树中更深层的任何内容。不正确的访问密钥不会抛出有用的异常(例如"不能使用队列密钥来访问命名空间")而是产生上述问题。