仅在 Azure 应用服务中出错:未将对象引用设置为对象的实例

Error only in Azure App Service: Object reference not set to an instance of an object

我有一个连续的 运行ning 作业(服务),我正在尝试将其作为应用服务部署到 Azure。它是在 Visual Studio 中作为典型的控制台应用程序创建的,然后它使用 TopShelf 到 运行 作为服务。

目前,我们正在将此服务部署到机架 Space 中托管的 windows 盒子。但我们正在从该模型转向 Azure。无论是在我的本地机器上调试还是在 Rack Space windows 服务器上,它 运行 都非常完美。但是当我部署到 Azure 时,出现对​​象引用错误。

这项服务的目的非常简单:在 Azure 服务总线上查询消息(如果有的话),将它们放入列表中,然后将列表交给另一个处理它们的 class。而已。服务总线的实际固定未在此项目或 class 中完成。为此,它依赖于 QueueAccess,它是一个单独的 class.

public class MessageQueueQuery : IMessageQueueQuery
{
    ...
    private QueueAccess queueAccess;  // QueueAccess is a reference to another project.

    public void Start()
    {
        ...
        queueAccess = new QueueAccess();
        ...

        // Go get the messages
        try
        {
            messageList = queueAccess.GetMessageCollection();  // <-- ERROR IS HERE
        }
            catch (Exception ex)
        {
            _log.ErrorFormat("Error in retreiving a list of messages from queue.", ex);
        }

同样,这适用于除作为应用服务部署到 Azure 之外的所有实例。完全相同的代码。我在想,也许我做错了部署?出于某种原因,QueueAccess 的 .dll 没有随部署一起发送?虽然当我通过 FTP 登录时,我可以看到它和其他文件一起放在那里。

这是完整的日志条目:

2016-05-20T20:56:08  PID[10568] Information    at XXXXXX.Queue.Core.MessageQueueQuery.ProcessMessages() in C:\XXXXXXGit\XXXXXX\Main\XXXXXX.Queue.Core\MessageQueueQuery.cs:line 108

2016-05-20T20:56:08  PID[10568] Information 2016-05-20 20:56:08,156 [5] ERROR XXXXXX.Queue.WindowsService.Bootstrapper [(null)] - Error in retrieving a list of messages from queue.

我不确定为什么它不起作用。

我不是 TopShelf 用户但是:

在 Rackspace 中,我猜你的应用程序 运行s 在 VM (IaaS) 中。 在应用服务中,您的应用 运行 在 PaaS 中,而不是 IaaS 中。

  1. 您可以尝试将您的应用程序部署到 Azure VM。

  2. 或检查 TopShelf 与 Azure PaaS 的兼容性。他们似乎为工作者角色(= Azure PaaS v1 的一部分)提供了解决方案 https://github.com/Topshelf/Topshelf.Azure

  3. 您还可以查看本机 Azure PaaS v2 解决方案 运行 网络作业 https://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/