0

我在获取 Microsoft.Azure.Documents 库以将客户端初始化为 azure worker 角色时遇到问题。我正在使用 Nuget Package 0.9.1-preview。

我已经模仿了azure 文档示例中所做的事情

通过模拟器在本地运行时,我可以很好地与 documentdb 连接,它按预期运行。在工作角色中运行时,我收到一系列 NullReferenceException,然后是 ArgumentNullException。

在此处输入图像描述

上面突出显示的底部 System.NullReferenceException 具有此调用堆栈 在此处输入图像描述

因此 nullReferenceExceptions 在新 DocumentClient 的此调用中开始。

var endpoint = "myendpoint";
var authKey = "myauthkey";
var enpointUri = new Uri(endpoint);
DocumentClient client = new DocumentClient(endpointUri, authKey);

在本地运行它与在环境以外的工作角色上运行它之间没有任何变化(显然)。

有没有人让 DocumentDb 担任工人角色,或者有没有人知道为什么它会抛出空引用异常?传入 DocumentClient() 的参数已填充。

更新: 我尝试将其重写为更通用,这至少有助于让工作角色运行并让我附加一个调试器。它在新的 DocumentClient 上抛出错误。似乎某些安全传递为空。初始化时所需的两个参数都不为空。我需要更改安全设置以使我的工作人员角色能够连接到我的文档数据库吗?(在本地仍然可以正常工作)

更新 2: 我可以让实例在发布模式下运行,但不能在调试模式下运行。因此,我猜这一定与某些配置错误的安全设置或存储设置有关?

似乎我得到了 System.Security.SecurityExceptions - 仅在使用 DocumentDb 时 - 队列不会给我那个错误。该错误的所有调用堆栈似乎都与 System.Diagnostics.EventLog 相关。我在 Intellitrace 摘要中看到的第一个异常是 System.Threading.WaitHandleCannotBeOpenedException。

更多信息 Intellitrace 摘要异常数据: 在此处输入图像描述 在此处输入图像描述

top 是最早的,bottom 是最新的(所以 System.Security.SecurityException 先发生,然后是 NullReference)

4

2 回答 2

4

我摆脱安全异常和空引用异常的解决方案是禁用智能跟踪。一旦我这样做了,我就能够部署和附加调试器并看到一切正常。

不确定 Intellitrace 中的 null 和 DocumentClient 之间是什么,但希望它只是与 nuget 相关,它将在下一次迭代中得到修复。

于 2014-12-10T20:55:08.743 回答
3

无法重现。

我创建了一个新的工人角色。单实例。向 cscfg 添加了 authkey 和 endoint 配置。

在 WorkerRole 类级别创建私有静态 DocumentClient

在 OnStart 中初始化 DocumentClient 在 OnStop 中释放 DocumentClient

在循环内部的 RunAsync 中,执行查询按预期工作。

在模拟器中测试有效。部署为发布到生产槽。作品。部署为带有远程调试的调试到登台。作品。将 VS 附加到 CloudService,断点在循环内命中。

工作解决方案:http ://ryancrawcour.blob.core.windows.net/samples/AzureCloudService1.zip

于 2014-12-05T02:54:28.210 回答