Я выполняю веб-задание локально - все еще подключаюсь к той же службе хранилища в Azure, - но когда я публикую его в Azure, это не удается.
Он также не работал локально с той же ошибкой, но я смог исправить ее и отлично запустить на моей локальной машине разработчика. Есть идеи, почему он может выйти из строя в Azure ?.
Повторюсь, даже несмотря на то, что он работает локально, он по-прежнему подключается к той же очереди и учетной записи хранения в Azure. Итак, единственное, что работает локально, - это код.
Вот ошибка, которую я получаю на портале Azure в журналах веб-заданий:
P.S. Я создал WebJob в VS 2015 Cloud -> Azure WebJob. Кроме того, он нацелен на .NET Framework 4.6.2
Еще один важный момент: у меня есть файл appsettings.json, который содержит некоторую информацию о настройках. Это находится в каталоге bin. Я читаю этот файл и получаю некоторые настройки, которые используются в моем коде. Когда я зашел по FTP в каталог WebJobs, я увидел там файл appsettings.json. Не уверен, может ли проблема быть связана с этим.
ОБНОВЛЕНИЕ: вот главное:
Вот MyJobActivator:
class Program
{
static readonly IKernel Kernel = new StandardKernel();
static JobHostConfiguration config;
static void Main()
{
BootStrapIoc();
var host = new JobHost(config);
host.RunAndBlock();
}
private static void BootStrapIoc()
{
Kernel.Load(Assembly.GetExecutingAssembly());
config = new JobHostConfiguration
{
JobActivator = new MyJobActivator(Kernel)
};
}
}
Вот мой класс Ninject Bindings
public class MyJobActivator : IJobActivator
{
private readonly IKernel _container;
public MyJobActivator(IKernel container)
{
_container = container;
}
public T CreateInstance<T>()
{
return _container.Get<T>();
}
}
Класс Functions выглядит так:
public class NinjectBindings : Ninject.Modules.NinjectModule
{
IConfiguration Configuration;
public override void Load()
{
Bind<IConfiguration>().ToMethod(ctx => {
var builder = new ConfigurationBuilder();
builder.SetBasePath(Directory.GetCurrentDirectory());
builder.AddJsonFile("appsettings.json");
Configuration = builder.Build();
return Configuration;
});
// Bind clients
var docDbClient = new Clients.DocumentDb.DocumentDbClient(Configuration);
// Bind Services
Bind<ISomeService>().To<SomeService>();
// Bind Repositories
Bind<ISomeRepository>().To<SomeRepository>();
}
}
Microsoft.Azure.WebJobs.Host.FunctionInvocationException: исключение при выполнении функции: Functions.ProcessQueueMessage ---> System.MissingMethodException: для этого объекта не определен конструктор без параметров.
public class Functions
{
private ISomeService _someService;
public Functions(ISomeService someService)
{
_someService = someService;
}
public async Task ProcessQueueMessage([QueueTrigger("my-queue")] MyMessageObject message, TextWriter log)
{
switch(message.typeId)
{
case MyEnum.TypeA:
_someService.FunctionA(message);
break;
case MyEnum.TypeB:
_someService.FunctionB(message);
break;
}
}
}