שפות ‎.NET

אפשר לכתוב את הפונקציה בשפות שונות של ‎ .NET (C#,‏ Visual Basic או F#). המשימה העיקרית זהה בכל השפות – יוצרים מחלקה שמיישמת אחד מהממשקים של Functions Framework:

במסמך הזה מופיעות דוגמאות ל-F# ול-Visual Basic.

תבניות

שימו לב: כדי להריץ את הדוגמאות במסמך הזה, תצטרכו להשתמש בתבניות:

  1. מתקינים את .NET SDK.

  2. מתקינים את חבילת התבנית:

    dotnet new install Google.Cloud.Functions.Templates
    

יש תבניות לשלושת סוגי הפונקציות ב-C#‎ (ברירת המחדל), ב-F#‎ וב-Visual Basic. כשיוצרים פרויקט חדש מתבנית, מציינים -lang f# כדי ליצור פרויקט F# ‎, או -lang vb כדי ליצור פרויקט Visual Basic. לדוגמה, כדי ליצור פונקציה חדשה של CloudEvent ללא הקלדה עבור Visual Basic, מריצים את הפקודה:

dotnet new gcf-untyped-event -lang vb

דוגמאות לפונקציות HTTP

משתמשים בפונקציות HTTP כשרוצים להפעיל את הפונקציה באמצעות בקשת HTTP(S). בדוגמאות הבאות מוצגת ההודעה "Hello World!"

F#‎

namespace HelloWorldFSharp

open Google.Cloud.Functions.Framework
open Microsoft.AspNetCore.Http

type Function() =
    interface IHttpFunction with
        member this.HandleAsync context =
            async {
                do! context.Response.WriteAsync "Hello World!" |> Async.AwaitTask
            } |> Async.StartAsTask :> _

Visual Basic

Imports Google.Cloud.Functions.Framework
Imports Microsoft.AspNetCore.Http

Public Class CloudFunction
    Implements IHttpFunction

    Public Async Function HandleAsync(context As HttpContext) As Task Implements IHttpFunction.HandleAsync
        Await context.Response.WriteAsync("Hello World!")
    End Function
End Class

קבצים בפרויקט לדוגמאות של HTTP

אלה קובצי הפרויקט של הדוגמאות שלמעלה:

F#‎

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="Function.fs" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Google.Cloud.Functions.Hosting" Version="2.2.1" />
  </ItemGroup>
</Project>

Visual Basic

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <RootNamespace>HelloWorldVb</RootNamespace>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Google.Cloud.Functions.Hosting" Version="2.2.1" />
  </ItemGroup>
</Project>

פריסת פונקציות HTTP

F#‎

 gcloud functions deploy fsharp-helloworld --no-gen2 --entry-point HelloWorldFSharp.Function --runtime dotnet6 --trigger-http --allow-unauthenticated

Visual Basic

 gcloud functions deploy vb-helloworld --no-gen2 --entry-point HelloWorldVb.CloudFunction --runtime dotnet6 --trigger-http --allow-unauthenticated

דוגמאות ל-CloudEvent

משתמשים בפונקציות CloudEvent כשרוצים שהפונקציה של Cloud Run תופעל באופן עקיף בתגובה לאירוע אסינכרוני, כמו הודעה בנושא Pub/Sub, שינוי בקטגוריה של Cloud Storage או אירוע Firebase.

F#‎

namespace HelloPubSubFSharp

open Google.Cloud.Functions.Framework
open Google.Events.Protobuf.Cloud.PubSub.V1
open Microsoft.Extensions.Logging
open System
open System.Threading.Tasks

type Function(logger: ILogger<Function>) =
    interface ICloudEventFunction<MessagePublishedData> with
        member this.HandleAsync(cloudEvent, data, cancellationToken) =
            let nameFromMessage = data.Message.TextData
            let name = if String.IsNullOrEmpty(nameFromMessage) then "world" else nameFromMessage
            logger.LogInformation("Hello {name}", name)
            Task.CompletedTask

Visual Basic

Imports System.Threading
Imports CloudNative.CloudEvents
Imports Google.Cloud.Functions.Framework
Imports Google.Events.Protobuf.Cloud.PubSub.V1
Imports Microsoft.Extensions.Logging

Public Class CloudFunction
    Implements ICloudEventFunction(Of MessagePublishedData)

    Private _logger As ILogger

    Public Sub New(ByVal logger As ILogger(Of CloudFunction))
        _logger = logger
    End Sub


    Public Function HandleAsync(cloudEvent As CloudEvent, data As MessagePublishedData, cancellationToken As CancellationToken) As Task _
        Implements ICloudEventFunction(Of MessagePublishedData).HandleAsync

        Dim nameFromMessage = data.Message?.TextData
        Dim name = If(String.IsNullOrEmpty(nameFromMessage), "world", nameFromMessage)
        _logger.LogInformation("Hello {name}", name)

        Return Task.CompletedTask
    End Function
End Class

פריסת הפונקציות של CloudEvent

F#‎

 gcloud functions deploy fsharp-hello-pubsub --no-gen2 --entry-point HelloPubSubFSharp.Function --runtime dotnet6 --trigger-topic my-topic --allow-unauthenticated

Visual Basic

 gcloud functions deploy vb-hello-pubsub --no-gen2 --entry-point HelloPubSubVb.CloudFunction --runtime dotnet6 --trigger-topic my-topic --allow-unauthenticated

בדיקת הדוגמאות של CloudEvent

כדי לבדוק את הדוגמאות של CloudEvent:

  1. מפרסמים הודעה בנושא Pub/Sub כדי להפעיל את הפונקציה:

    gcloud pubsub topics publish my-topic --message Flurry
  2. מעיינים ביומנים:

    gcloud functions logs read --limit 10

אמורה להופיע הודעה דומה לזו שבהמשך, שכוללת את השם שפרסמתם בנושא Pub/Sub:

D      my-function  ...  Function execution started
I      my-function  ...  Hello Flurry!
D      my-function  ...  Function execution took 39 ms, finished with status: 'ok'