Thaarani S
Thaarani S

Reputation: 19

Azure function returns error-No job function found

we are trying to invoke azure cognitive services- translator api using azure function apps.We are getting the following error in the c# terminal:

No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).

Our C# code for reference:

 private const string key=" ";
                private static readonly HttpClient client=new HttpClient
                {
                   DefaultRequestHeaders={{"Ocp-Apim-Subscription-key",key}}
                };
                public static async Task Main()
                {
                    while(true){
                        var text=Console.ReadLine();
                        var translatedText=await Translate(text,"en");
                        Console.WriteLine(translatedText);
                    }
                }
                public static async Task<string> Translate(string text,string language){

                    var encodedText=WebUtility.UrlEncode(text);
                    var uri="https://api.microsofttranslator.com/V2/Http.svc/Translate?" + $"to={language}&text={encodedText}";
                    var result=await client.GetStringAsync(uri);
                    return XElement.Parse(result).Value;
                }

Also .csproj file code for reference:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AzureFunctionsVersion>v3</AzureFunctionsVersion>
    <RootNamespace>transaltor_cognetive_service</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.7" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.7" >
    <PrivateAssets>all</PrivateAssets>
    <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
  <PropertyGroup>
   <LangVersion>7.1</LangVersion>
</PropertyGroup>
</Project>

Upvotes: 0

Views: 1244

Answers (1)

rickvdbosch
rickvdbosch

Reputation: 15551

As an addition to the MarleneHE's comment:

You're missing a FunctionNameAttribute and a TriggerAttribute. Without those, the Functions Runtime doesn't know which of the methods is the entry point, or how to trigger it.

In a class library, a function is a static method with a FunctionName and a trigger attribute

and

The FunctionName attribute marks the method as a function entry point. The name must be unique within a project, start with a letter and only contain letters, numbers, _, and -, up to 127 characters in length. Project templates often create a method named Run, but the method name can be any valid C# method name.

The trigger attribute specifies the trigger type and binds input data to a method parameter.

Upvotes: 1

Related Questions