Могу ли я использовать dotnet и узел в функциях Azure 2.0?

Поскольку API-интерфейсы Durable Functions к настоящему времени ограничены, мне интересно, могу ли я написать свой код оркестрации с помощью сценариев C# и свои функции активности с помощью узла в Azure Functions 2.0?

2 ответа

Решение

Мы собираемся опубликовать выпуск v2 Functions, который устраняет возможность запуска нескольких языков в одном приложении Function. В дальнейшем все функции в приложении Function должны быть написаны на одном языке. (Обратите внимание, что приложения функций v1 не будут затронуты этим.)

Мы стремимся объявить о доступности JS для общего пользования в конце этого года, в который войдет и остальная часть API. Обходной путь, который мы рекомендуем в настоящее время, подобен тому, что задокументировано здесь. В вашем случае вы могли бы представить некоторые API-интерфейсы JavaScript через HTTP, и функции функций C# могли бы вызывать их из приложения Function, которое содержит ваш оркестратор C#.

Обновить

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


Вы, вероятно, говорите об этом пределе, так как в JS некоторые C# API еще не реализованы, а некоторые не будут реализованы.

Мы можем вызвать JS Activity в функции оркестровки C#. Просто тест с простым действием возвращает строку, работает как положено.

Для местного развития, FUNCTIONS_WORKER_RUNTIME(в local.settings.json) указывает наш рабочий язык приложения функции, только функции, соответствующие этой среде выполнения, могут быть распознаны узлом функции. Например, во время выполнения dotnet функции js игнорируются.

  1. удалять FUNCTIONS_WORKER_RUNTIME и хост может работать с разными языками.

  2. Добавьте одну папку с именем вашей функции Activity в папку приложения функции, содержащую function.json и index.js. Смотрите иллюстрацию ниже (в VSCode, аналогично VS).

    VSCode иллюстрация

  3. Добавьте действие CopyToOutputDirectory в functionappname.csproj.

    <ItemGroup>
    ...
        <None Update="MyJsActivity\index.js">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
        <None Update="MyJsActivity\function.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
    </ItemGroup>
    
  4. Не стесняйтесь устанавливать модуль узла при необходимости, не забудьте добавить действие CopyToOutputDirectory для package.json, чтобы мы могли устанавливать модули, используя его во время развертывания.

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

Другие вопросы по тегам