Как загрузить функцию активности Azure из ссылочного пакета nuget - PullRequest
2 голосов
/ 29 апреля 2019

Я реализовал долговременную функцию Azure, которая, как вы знаете, содержит мои Orchestration , Orchestrator и Деятельности .
Дело в том, что одно из моих действий реализовано в другой сборке, и я сослался на него как на пакет nuget.
Теперь проблема в том, что когда я запускаю свое решение в Visual Studio, все функции Azure загружаются с помощью AzureFunctionsTools, но этоактивность, которая находится в пакете nuget, не указана в списке, и я вижу следующее сообщение об ошибке:

Ошибка: «MyExternalActivity» не существует, отключено илине функция деятельности.Дополнительная информация: Ниже перечислены известные функции действий: 'MyLocalActivity'.

А вот мое определение MyExternalActivity в проекте nuget:

[FunctionName(FunctionName)]
public async Task<object> Run([ActivityTrigger] DurableActivityContextBase context) 
{
...
}

А вот и мой Orchestrator.класс:

[FunctionName(FunctionName)]
public static async Task RunOrchestrator([OrchestrationTrigger] DurableOrchestrationContextBase context, ILogger log)
 {
    ...
    await context.CallActivityAsync<object>("MyLocalActivity", parameters); // Successfull; code is in this solution
    ...   
    ...
    await context.CallActivityAsync<object>("MyExternalActivity" , parameters); // Error; Referenced by nuget package
    ...
}

Примечание. Я пытался удалить ссылку и добавить проект кода nuget к тому же решению и ссылку через проект напрямую, но произошла та же ошибка

1 Ответ

3 голосов
/ 30 апреля 2019

Причина, по которой вы столкнулись с этой проблемой, заключается в том, что вызов другой функции отличается от вызова метода в другом проекте или пакете nuget.Они являются полностью отдельными объектами, поэтому добавление ссылки не приведет к включению функции действия.

Правильный способ реализации этого состоит в том, чтобы обе функции были определены в одном проекте.Вы можете иметь определение функции как оболочку, которая затем вызывает код в пакете nuget.

[FunctionName(FunctionName)]
public async Task<object> Run([ActivityTrigger] DurableActivityContextBase context) 
{
    MethodFromNugetPackage(context);
}

Если вы хотите использовать функции в разных проектах, есть пара опций:

1) Наличие нескольких служб функций в Azure.

2) Разверните код с отключенной опцией «Удалить дополнительные файлы в месте назначения».Это предполагает, что вы развертываете из Visual Studio, поэтому, если вы используете другой метод развертывания, вам нужно будет найти и откорректировать эквивалентный параметр.Чтобы было ясно, это не рекомендуется, поскольку вы можете столкнуться с проблемами, которые трудно отследить, но это должно сработать.enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...