Azure Web作业:System.NotSupportedException - 不支持的调用类型''

时间:2016-06-29 08:12:00

标签: c# azure azure-webjobs

我遇到了一个奇怪的问题,即我的网络工作间歇性地继续失败。

为简要概述当前流程,我的Web作业与从中获取自定义对象的队列触发器相关联:

public async Task ProcessClientUsageQueueMessage(
        [QueueTrigger("clientusageupdated")] ClientUsage clientUsageMessage,
        TextWriter log)
    {
        log.WriteLine("Message received: {0}", JsonConvert.SerializeObject(clientUsageMessage));

        var clientReference = clientUsageMessage.ClientReference;
        await ProcessClientUsage(clientReference, log);
    }
然后,ProcessClientUsage继续通过混合连接从本地SQL服务器查询数据。不幸的是,存储过程必须筛选大量数据,导致此调用有时需要大约10分钟才能完成。

public async Task<IEnumerable<ClientUsageDetail>> GetClientUsage(Client client)
    {
        using (SqlConnection connection = new SqlConnection(client.ClientDatabaseConnectionString))
        using (SqlCommand command = new SqlCommand { CommandText = "[Oracle].[_GetUsage]", Connection = connection, CommandType = System.Data.CommandType.StoredProcedure, CommandTimeout = 2000 })
        {
            command.Parameters.Add(new SqlParameter { ParameterName = "@KeepForDays", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Input, Value = client.DaysRetention ?? 40 });
            command.Parameters.Add(new SqlParameter { ParameterName = "@LatestEventDetailID", SqlDbType = SqlDbType.BigInt, Direction = ParameterDirection.Input, Value = client.LatestEventDetailId ?? 0 });
            connection.Open();

            using (SqlDataReader reader = await command.ExecuteReaderAsync())
            {
                var results = await reader.ReadAsIEnumarableAsync<ClientUsageDetail>();
                _log.Debug("ClientUsageRepository.GetClientUsage: Client: {0}, results: {1}", client.Reference, results.Count());
                return results;
            }
        }
    }

但是,当Web作业正在进行调用时(有时在重新启动Web作业时),将引发以下异常并且Web作业将停止/重新启动:

System.NotSupportedException未处理 消息:Microsoft.Azure.WebJobs.Host.dll中发生未处理的“System.NotSupportedException”类型异常 附加信息:不支持的调用类型''。

在调试Web作业时本地以及在具有标准服务计划且“Always On”设置为true的站点上托管Web作业的azure上都会发生这种情况。

这是由于连续Web作业中发生的某些超时,还是传入队列消息的问题?我已经尝试重新创建队列并手动发布单个消息,但我注意到,几分钟后,Web作业响应另一条消息(我没有创建)。

非常感谢任何帮助!

不确定它是否相关,但为了完全公开,我还通过依赖注入(StructureMap)实例化了Azure表存储和Redis缓存实例,这些实例稍后将在过程中用于持久化/加载结果。

0 个答案:

没有答案