Referensi pengembang skrip C# (.csx) Azure Functions

Artikel ini adalah pengantar untuk mengembangkan Azure Functions dengan menggunakan skrip C# (.csx).

Penting

Skrip C# didukung terutama untuk memberikan pengalaman dalam portal yang nyaman untuk membantu Anda dengan cepat mulai membuat dan menjalankan fungsi C#. Untuk aplikasi berkualitas produksi, Anda harus mengembangkan fungsi C# Anda secara lokal sebagai proyek pustaka kelas C# yang dikompilasi. Untuk mempelajari cara memigrasikan proyek skrip C# ke proyek pustaka kelas C# (pekerja terisolasi), lihat Mengonversi aplikasi skrip C# ke proyek C#.

Azure Functions memungkinkan Anda mengembangkan fungsi menggunakan C# dengan salah satu cara berikut:

Jenis Proses eksekusi Ekstensi kode Lingkungan pengembangan Referensi
Skrip C# dalam proses .Csx Portal
Alat Inti
Artikel ini
Pustaka kelas C# (pekerja terisolasi) proses pekerja terisolasi .cs Visual Studio
Visual Studio Code
Alat Inti
Fungsi proses pekerja terisolasi .NET
Pustaka kelas C# (dalam proses) dalam proses .cs Visual Studio
Visual Studio Code
Alat Inti
Fungsi pustaka kelas C# dalam proses

Cara kerja .csx

Data mengalir ke fungsi C# Anda melalui argumen metode. Nama argumen ditentukan dalam file function.json, dan ada nama yang sudah ditentukan sebelumnya untuk mengakses hal-hal seperti pencatat fungsi dan token pembatalan.

Format .csx memungkinkan Anda untuk menulis lebih sedikit "boilerplate" dan hanya fokus pada penulisan fungsi C#. Alih-alih membungkus semuanya di namespace dan kelas, cukup tentukan metode Run. Sertakan referensi perakitan dan namespace di awal file seperti biasa.

File .csx aplikasi fungsi dikompilasi saat instans diinisialisasi. Langkah kompilasi ini berarti hal-hal seperti start dingin mungkin membutuhkan waktu lebih lama untuk fungsi skrip C# dibandingkan dengan pustaka kelas C#. Langkah kompilasi ini juga mengapa fungsi skrip C# dapat diedit di portal Azure, sementara pustaka kelas C# tidak.

Struktur folder

Struktur folder untuk proyek skrip C# terlihat seperti contoh berikut:

FunctionsProject
 | - MyFirstFunction
 | | - run.csx
 | | - function.json
 | | - function.proj
 | - MySecondFunction
 | | - run.csx
 | | - function.json
 | | - function.proj
 | - host.json
 | - extensions.csproj
 | - bin

Ada file host.json bersama yang dapat digunakan untuk mengonfigurasi aplikasi fungsi. Setiap fungsi memiliki file kode sendiri (.csx) dan file konfigurasi pengikatan (function.json).

Ekstensi pengikatan yang diperlukan di versi 2.x dan versi yang lebih baru dari runtime Functions ditentukan dalam file extensions.csproj, dengan file pustaka yang sebenarnya di folder bin. Saat mengembangkan secara lokal, Anda harus mendaftarkan ekstensi pengikatan. Ketika Anda mengembangkan fungsi di portal Azure, pendaftaran ini dilakukan untuk Anda.

Pengikatan ke argumen

Data input atau output terikat ke parameter fungsi skrip C# melalui properti name dalam function.js pada file konfigurasi. Contoh berikut menunjukkan file function.js dan file run.csx untuk fungsi yang dipicu antrean. Parameter yang menerima data dari pesan antrean dinamai myQueueItem karena itulah nilai properti name.

{
    "disabled": false,
    "bindings": [
        {
            "type": "queueTrigger",
            "direction": "in",
            "name": "myQueueItem",
            "queueName": "myqueue-items",
            "connection":"MyStorageConnectionAppSetting"
        }
    ]
}
#r "Microsoft.WindowsAzure.Storage"

using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Queue;
using System;

public static void Run(CloudQueueMessage myQueueItem, ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem.AsString}");
}

Pernyataan #r dijelaskan nanti dalam artikel ini.

Jenis yang didukung untuk pengikatan

Setiap pengikatan memiliki jenis yang didukung sendiri; misalnya, pemicu blob dapat digunakan dengan parameter string, parameter POCO, parameter CloudBlockBlob, atau salah satu dari beberapa jenis lain yang didukung. Artikel referensi pengikatan untuk pengikatan blob mencantumkan semua jenis parameter yang didukung untuk pemicu blob. Untuk informasi selengkapnya, lihat Pemicu dan pengikatan dan dokumen referensi pengikatan untuk setiap jenis pengikatan.

Tip

Jika Anda berencana untuk menggunakan pengikatan HTTP atau WebHook, rencanakan untuk menghindari kekurangan port yang dapat disebabkan oleh pembuatan objek yang tidak tepat dari HttpClient. Untuk informasi selengkapnya, lihat Cara mengelola koneksi di Azure Functions.

Mereferensikan kelas kustom

Jika perlu menggunakan kelas Plain Old CLR Object (POCO), Anda dapat menyertakan definisi kelas di dalam file yang sama atau memasukkannya ke dalam file terpisah.

Contoh berikut menunjukkan contoh run.csx yang menyertakan definisi kelas POCO.

public static void Run(string myBlob, out MyClass myQueueItem)
{
    log.Verbose($"C# Blob trigger function processed: {myBlob}");
    myQueueItem = new MyClass() { Id = "myid" };
}

public class MyClass
{
    public string Id { get; set; }
}

Kelas POCO harus memiliki getter dan setter yang ditentukan untuk setiap properti.

Menggunakan kembali kode .csx

Anda dapat menggunakan kelas dan metode yang didefinisikan dalam file .csx lainnya dalam file run.csx Anda. Untuk melakukannya, gunakan direktif #load dalam file run.csx Anda. Dalam contoh berikut, rutinitas pengelogan bernama MyLogger dibagikan di myLogger.csx dan dimuat ke dalam run.csx menggunakan direktif #load:

Contoh run.csx:

#load "mylogger.csx"

using Microsoft.Extensions.Logging;

public static void Run(TimerInfo myTimer, ILogger log)
{
    log.LogInformation($"Log by run.csx: {DateTime.Now}");
    MyLogger(log, $"Log by MyLogger: {DateTime.Now}");
}

Contoh mylogger.csx:

public static void MyLogger(ILogger log, string logtext)
{
    log.LogInformation(logtext);
}

Menggunakan file .csx bersama adalah pola umum ketika Anda ingin mengetikkan data yang dilewatkan di antara fungsi dengan menggunakan objek POCO. Dalam contoh yang disederhanakan berikut, pemicu HTTP dan pemicu antrean berbagi objek POCO bernama Order untuk mengetik data urutan:

Contoh run.csx untuk pemicu HTTP:

#load "..\shared\order.csx"

using System.Net;
using Microsoft.Extensions.Logging;

public static async Task<HttpResponseMessage> Run(Order req, IAsyncCollector<Order> outputQueueItem, ILogger log)
{
    log.LogInformation("C# HTTP trigger function received an order.");
    log.LogInformation(req.ToString());
    log.LogInformation("Submitting to processing queue.");

    if (req.orderId == null)
    {
        return new HttpResponseMessage(HttpStatusCode.BadRequest);
    }
    else
    {
        await outputQueueItem.AddAsync(req);
        return new HttpResponseMessage(HttpStatusCode.OK);
    }
}

Contoh run.csx untuk pemicu antrean:

#load "..\shared\order.csx"

using System;
using Microsoft.Extensions.Logging;

public static void Run(Order myQueueItem, out Order outputQueueItem, ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed order...");
    log.LogInformation(myQueueItem.ToString());

    outputQueueItem = myQueueItem;
}

Contoh order.csx:

public class Order
{
    public string orderId {get; set; }
    public string custName {get; set;}
    public string custAddress {get; set;}
    public string custEmail {get; set;}
    public string cartId {get; set; }

    public override String ToString()
    {
        return "\n{\n\torderId : " + orderId +
                  "\n\tcustName : " + custName +
                  "\n\tcustAddress : " + custAddress +
                  "\n\tcustEmail : " + custEmail +
                  "\n\tcartId : " + cartId + "\n}";
    }
}

Anda dapat menggunakan jalur relatif dengan direktif #load:

  • #load "mylogger.csx" memuat file yang terletak di folder fungsi.
  • #load "loadedfiles\mylogger.csx" memuat file yang terletak di folder di folder fungsi.
  • #load "..\shared\mylogger.csx" memuat file yang terletak di folder pada tingkat yang sama dengan folder fungsi, yaitu, tepat di bawah wwwroot.

Direktif #load hanya berfungsi dengan file .csx, bukan dengan file .cs.

Pengikatan ke nilai pengembalian metode

Anda dapat menggunakan nilai pengembalian metode untuk pengikatan output, dengan menggunakan nama $return di function.json.

{
    "name": "$return",
    "type": "blob",
    "direction": "out",
    "path": "output-container/{id}"
}

Berikut adalah kode skrip C# menggunakan nilai pengembalian, diikuti dengan contoh asinkron:

public static string Run(WorkItem input, ILogger log)
{
    string json = string.Format("{{ \"id\": \"{0}\" }}", input.Id);
    log.LogInformation($"C# script processed queue message. Item={json}");
    return json;
}
public static Task<string> Run(WorkItem input, ILogger log)
{
    string json = string.Format("{{ \"id\": \"{0}\" }}", input.Id);
    log.LogInformation($"C# script processed queue message. Item={json}");
    return Task.FromResult(json);
}

Gunakan nilai yang dikembalikan hanya jika eksekusi fungsi yang berhasil selalu menghasilkan nilai yang dikembalikan untuk diteruskan ke pengikatan output. Jika tidak, gunakan ICollector atau IAsyncCollector, seperti yang ditunjukkan di bagian berikut.

Menulis beberapa nilai output

Untuk menulis beberapa nilai ke pengikatan output, atau jika pemanggilan fungsi yang berhasil mungkin tidak menghasilkan apa pun untuk diteruskan ke pengikatan output, gunakan jenis ICollector atau IAsyncCollector. Jenis-jenis ini adalah koleksi hanya-tulis yang ditulis ke pengikatan output ketika metode selesai.

Contoh ini menulis beberapa pesan antrean ke dalam antrean yang sama menggunakan ICollector:

public static void Run(ICollector<string> myQueue, ILogger log)
{
    myQueue.Add("Hello");
    myQueue.Add("World!");
}

Pencatatan

Untuk mencatat output ke log streaming Anda di C#, sertakan argumen jenis ILogger. Kami menyarankan Anda menamainya log. Hindari menggunakan Console.Write di Azure Functions.

public static void Run(string myBlob, ILogger log)
{
    log.LogInformation($"C# Blob trigger function processed: {myBlob}");
}

Catatan

Untuk informasi tentang kerangka kerja pengelogan lebih baru yang dapat Anda gunakan alih-alih TraceWriter, lihat dokumentasi ILogger di panduan pengembang pustaka kelas .NET.

Pengelogan metrik kustom

Anda dapat menggunakan metode ekstensi LogMetric pada ILogger untuk membuat metrik kustom di Application Insights. Berikut adalah contoh panggilan metode:

logger.LogMetric("TestMetric", 1234);

Kode ini adalah alternatif untuk memanggil TrackMetric dengan menggunakan Application Insights API untuk .NET.

Asinkron

Untuk membuat fungsi asinkron, gunakan kata kunci asyncdan kembalikan Task objek.

public async static Task ProcessQueueMessageAsync(
        string blobName,
        Stream blobInput,
        Stream blobOutput)
{
    await blobInput.CopyToAsync(blobOutput, 4096);
}

Anda tidak dapat menggunakan parameter out dalam fungsi asinkron. Untuk pengikatan output, gunakan nilai pengembalian fungsi atau objek kolektor.

Token pembatalan

Fungsi dapat menerima parameter CancellationToken yang memungkinkan sistem operasi untuk memberi tahu kode Anda ketika fungsi akan dihentikan. Anda dapat menggunakan pemberitahuan ini untuk memastikan fungsi tidak berakhir secara tiba-tiba dengan meninggalkan data dalam status tidak konsisten.

Contoh berikut menunjukkan cara memeriksa penghentian fungsi yang akan datang.

using System;
using System.IO;
using System.Threading;

public static void Run(
    string inputText,
    TextWriter logger,
    CancellationToken token)
{
    for (int i = 0; i < 100; i++)
    {
        if (token.IsCancellationRequested)
        {
            logger.WriteLine("Function was cancelled at iteration {0}", i);
            break;
        }
        Thread.Sleep(5000);
        logger.WriteLine("Normal processing for queue message={0}", inputText);
    }
}

Mengimpor namespace

Jika perlu mengimpor namespace, Anda dapat melakukannya seperti biasa, dengan klausa using.

using System.Net;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;

public static Task<HttpResponseMessage> Run(HttpRequestMessage req, ILogger log)

Namespace berikut diimpor secara otomatis dan karenanya opsional:

  • System
  • System.Collections.Generic
  • System.IO
  • System.Linq
  • System.Net.Http
  • System.Threading.Tasks
  • Microsoft.Azure.WebJobs
  • Microsoft.Azure.WebJobs.Host

Mereferensikan rakitan eksternal

Untuk rakitan kerangka kerja, tambahkan referensi dengan menggunakan direktif #r "AssemblyName".

#r "System.Web.Http"

using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;

public static Task<HttpResponseMessage> Run(HttpRequestMessage req, ILogger log)

Unit berikut secara otomatis ditambahkan oleh lingkungan hosting Azure Functions:

  • mscorlib
  • System
  • System.Core
  • System.Xml
  • System.Net.Http
  • Microsoft.Azure.WebJobs
  • Microsoft.Azure.WebJobs.Host
  • Microsoft.Azure.WebJobs.Extensions
  • System.Web.Http
  • System.Net.Http.Formatting

Rakitan berikut dapat dirujuk dengan nama sederhana, berdasarkan versi runtime:

  • Newtonsoft.Json
  • Microsoft.WindowsAzure.Storage*

*Dihapus dalam runtime versi 4.x.

Dalam kode, rakitan dirujuk seperti contoh berikut:

#r "AssemblyName"

Mereferensikan rakitan kustom

Untuk mereferensikan rakitan kustom, Anda dapat menggunakan rakitan bersama atau rakitan privat:

  • Rakitan bersama dibagikan di semua fungsi dalam aplikasi fungsi. Untuk mereferensikan rakitan kustom, unggah rakitan ke folder bernama bin di folder akar (wwwroot) aplikasi fungsi Anda.

  • Rakitan privat adalah bagian dari konteks fungsi tertentu, dan mendukung pemuatan samping dari versi yang berbeda. Rakitan privat harus diunggah dalam folder bin di direktori fungsi. Referensikan rakitan menggunakan nama file, seperti #r "MyAssembly.dll".

Untuk informasi tentang cara mengunggah file ke folder fungsi Anda, lihat bagian tentang manajemen paket.

Direktori yang disimak

Direktori yang berisi file skrip fungsi secara otomatis disimak untuk perubahan pada rakitan. Untuk menyimak perubahan rakitan di direktori lain, tambahkan mereka ke daftar watchDirectories di host.json.

Menggunakan paket NuGet

Cara paket ekstensi pengikatan dan paket NuGet lainnya ditambahkan ke aplikasi fungsi Anda bergantung pada versi runtime Functions yang ditargetkan.

Secara default, set paket NuGet ekstensi Functions yang didukung tersedia untuk aplikasi fungsi skrip C# Anda dengan menggunakan bundel ekstensi. Untuk mempelajari lebih lanjut, lihat Bundel ekstensi.

Jika karena alasan tertentu Anda tidak dapat menggunakan bundel ekstensi dalam proyek, Anda juga dapat menggunakan Azure Functions Core Tools untuk menginstal ekstensi berdasarkan pengikatan yang ditentukan dalam file function.json di aplikasi Anda. Saat menggunakan Core Tools untuk mendaftarkan ekstensi, pastikan untuk menggunakan opsi --csx. Untuk mempelajari lebih lanjut, lihat penginstalan ekstensi func.

Secara default, Core Tools membaca file function.json dan menambahkan paket yang diperlukan ke file proyek pustaka kelas extensions.csproj C# di akar sistem file aplikasi fungsi (wwwroot). Karena Core Tools menggunakan dotnet.exe, Anda dapat menggunakannya untuk menambahkan referensi paket NuGet ke file ekstensi ini. Selama penginstalan, Core Tools membangun extensions.csproj untuk menginstal pustaka yang diperlukan. Berikut adalah contoh file extensions.csproj yang menambahkan referensi ke Microsoft.ProjectOxford.Face versi 1.1.0:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.ProjectOxford.Face" Version="1.1.0" />
    </ItemGroup>
</Project>

Catatan

Untuk skrip C# (.csx), Anda harus mengatur TargetFramework ke nilai netstandard2.0. Kerangka kerja target lainnya, seperti net6.0, tidak didukung.

Untuk menggunakan umpan NuGet kustom, tentukan umpan dalam file Nuget.Config di akar aplikasi fungsi. Untuk informasi selengkapnya, lihat Mengonfigurasi perilaku NuGet.

Jika Anda hanya mengerjakan proyek di portal, Anda harus membuat file extensions.csproj atau file Nuget.Config secara manual langsung di situs. Untuk mempelajari selengkapnya, lihat Memasang ekstensi secara manual.

Variabel lingkungan

Untuk mendapatkan variabel lingkungan atau nilai pengaturan aplikasi, gunakan System.Environment.GetEnvironmentVariable, seperti yang ditunjukkan dalam contoh kode berikut:

public static void Run(TimerInfo myTimer, ILogger log)
{
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    log.LogInformation(GetEnvironmentVariable("AzureWebJobsStorage"));
    log.LogInformation(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
}

public static string GetEnvironmentVariable(string name)
{
    return name + ": " +
        System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}

Kebijakan percobaan kembali

Functions mendukung dua kebijakan coba lagi bawaan. Untuk informasi selengkapnya, lihat Kebijakan coba lagi.

Berikut kebijakan percobaan kembali di file function.json:

{
    "disabled": false,
    "bindings": [
        {
            ....
        }
    ],
    "retry": {
        "strategy": "fixedDelay",
        "maxRetryCount": 4,
        "delayInterval": "00:00:10"
    }
}
Properti function.json Deskripsi
strategi Gunakan fixedDelay.
maxRetryCount Harus diisi. Jumlah maksimum percobaan kembali yang diizinkan per eksekusi fungsi. -1 berarti mencoba lagi tanpa batas.
delayInterval Penundaan yang digunakan di antara percobaan ulang. Tentukan sebagai string dengan format HH:mm:ss.

Pengikatan pada runtime

Dalam bahasa C# dan .NET lainnya, Anda dapat menggunakan pola pengikatan imperatif, dibandingkan dengan pengikatan deklaratif di function.json. Pengikatan imperatif berguna ketika parameter pengikatan perlu dihitung pada runtime alih-alih waktu desain. Dengan pola ini, Anda dapat mengikat ke pengikatan input dan output yang didukung secara langsung dalam kode fungsi Anda.

Tentukan pengikatan imperatif sebagai berikut:

  • Jangan sertakan entri di function.json untuk pengikatan imperatif yang Anda inginkan.
  • Lewatkan dalam parameter input Binder binder atau IBinder binder.
  • Gunakan pola C# berikut untuk melakukan pengikatan data.
using (var output = await binder.BindAsync<T>(new BindingTypeAttribute(...)))
{
    ...
}

BindingTypeAttribute adalah atribut .NET yang mendefinisikan pengikatan Anda dan T merupakan jenis input atau output yang didukung oleh jenis pengikatan tersebut. T tidak dapat menjadi out jenis parameter (seperti out JObject). Misalnya, pengikatan output tabel Mobile Apps mendukung enam jenis output, tetapi Anda hanya dapat menggunakan ICollector<T> atau IAsyncCollector<T> untuk T.

Contoh atribut tunggal

Contoh kode berikut membuat Penyimpanan blob pengikatan output dengan jalur blob yang ditentukan pada runtime, lalu menulis string ke blob.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host.Bindings.Runtime;

public static async Task Run(string input, Binder binder)
{
    using (var writer = await binder.BindAsync<TextWriter>(new BlobAttribute("samples-output/path")))
    {
        writer.Write("Hello World!!");
    }
}

BlobAttribute mendefinisikan pengikatan input atau output penyimpanan blob, dan TextWriter adalah jenis pengikatan output yang didukung.

Contoh beberapa atribut

Contoh sebelumnya mendapatkan pengaturan aplikasi untuk string koneksi aplikasi fungsi akun Storage utama (yaitu AzureWebJobsStorage). Anda dapat menentukan pengaturan aplikasi kustom untuk akun Storage dengan menambahkan StorageAccountAttribute dan meneruskan array atribut ke dalam BindAsync<T>(). Gunakan parameter Binder, alih-alih IBinder. Misalnya:

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host.Bindings.Runtime;

public static async Task Run(string input, Binder binder)
{
    var attributes = new Attribute[]
    {
        new BlobAttribute("samples-output/path"),
        new StorageAccountAttribute("MyStorageAccount")
    };

    using (var writer = await binder.BindAsync<TextWriter>(attributes))
    {
        writer.Write("Hello World!");
    }
}

Tabel berikut mencantumkan atribut .NET untuk setiap jenis pengikatan dan paket tempat mereka ditentukan.

Mengikat Atribut Menambahkan referensi
Azure Cosmos DB Microsoft.Azure.WebJobs.DocumentDBAttribute #r "Microsoft.Azure.WebJobs.Extensions.CosmosDB"
Pusat Aktivitas Microsoft.Azure.WebJobs.ServiceBus.EventHubAttribute, Microsoft.Azure.WebJobs.ServiceBusAccountAttribute #r "Microsoft.Azure.Jobs.ServiceBus"
Aplikasi Seluler Microsoft.Azure.WebJobs.MobileTableAttribute #r "Microsoft.Azure.WebJobs.Extensions.MobileApps"
Notification Hubs Microsoft.Azure.WebJobs.NotificationHubAttribute #r "Microsoft.Azure.WebJobs.Extensions.NotificationHubs"
Bus Layanan Microsoft.Azure.WebJobs.ServiceBusAttribute, Microsoft.Azure.WebJobs.ServiceBusAccountAttribute #r "Microsoft.Azure.WebJobs.ServiceBus"
Antrean penyimpanan Microsoft.Azure.WebJobs.QueueAttribute, Microsoft.Azure.WebJobs.StorageAccountAttribute
Blob Storage Microsoft.Azure.WebJobs.BlobAttribute, Microsoft.Azure.WebJobs.StorageAccountAttribute
Tabel Storage Microsoft.Azure.WebJobs.TableAttribute, Microsoft.Azure.WebJobs.StorageAccountAttribute
Twilio Microsoft.Azure.WebJobs.TwilioSmsAttribute #r "Microsoft.Azure.WebJobs.Extensions.Twilio"

Mengonversi aplikasi skrip C# menjadi proyek C#

Cara term mudah untuk mengonversi aplikasi fungsi skrip C# ke proyek pustaka kelas C# yang dikompilasi adalah dengan memulai dengan proyek baru. Anda kemudian dapat, untuk setiap fungsi, memigrasikan kode dan konfigurasi dari setiap file run.csx dan file function.json dalam folder fungsi ke satu file kode pustaka kelas .cs baru. Misalnya, ketika Anda memiliki fungsi skrip C# bernama HelloWorld Anda akan memiliki dua file: HelloWorld/run.csx dan HelloWorld/function.json. Untuk fungsi ini, Anda membuat file kode bernama HelloWorld.cs di proyek pustaka kelas baru Anda.

Jika Anda menggunakan pembuatan skrip C# untuk pengeditan portal, Anda dapat mengunduh konten aplikasi ke komputer lokal Anda. Pilih opsi Konten situs alih-alih konten dan proyek Visual Studio. Anda tidak perlu membuat proyek, dan tidak menyertakan pengaturan aplikasi dalam unduhan. Anda menentukan lingkungan pengembangan baru, dan lingkungan ini seharusnya tidak memiliki izin yang sama dengan lingkungan aplikasi yang dihosting.

Instruksi ini menunjukkan kepada Anda cara mengonversi fungsi skrip C# (yang berjalan dalam proses dengan host Functions) ke fungsi pustaka kelas C# yang berjalan dalam proses pekerja yang terisolasi.

  1. Selesaikan bagian Buat proyek aplikasi fungsi dari mulai cepat pilihan Anda:


  1. Jika kode skrip C# asli Anda menyertakan extensions.csproj file atau file apa pun function.proj , salin referensi paket dari file ini dan tambahkan ke file proyek .csproj baru dalam hal yang sama ItemGroup dengan dependensi inti Functions.

    Tip

    Konversi memberikan kesempatan yang baik untuk memperbarui ke versi terbaru dependensi Anda. Melakukannya mungkin memerlukan perubahan kode tambahan di langkah selanjutnya.

  2. Salin konten file asli host.json ke dalam file proyek host.json baru, kecuali untuk extensionBundles bagian (proyek C# yang dikompilasi tidak menggunakan bundel ekstensi dan Anda harus secara eksplisit menambahkan referensi ke semua ekstensi yang digunakan oleh fungsi Anda). Saat menggabungkan file host.json, ingatlah bahwa skema diberi host.json versi, dengan sebagian besar aplikasi menggunakan versi 2.0. Konten bagian extensions dapat berbeda berdasarkan versi tertentu dari ekstensi pengikatan yang digunakan oleh fungsi Anda. Lihat artikel referensi ekstensi individual untuk mempelajari cara mengonfigurasi host.json dengan benar untuk versi spesifik Anda.

  3. Untuk setiap file bersama yang #load direferensikan oleh direktif, buat file baru .cs untuk masing-masing referensi bersama ini. Paling mudah untuk membuat file baru .cs untuk setiap definisi kelas bersama. Jika ada metode statis tanpa kelas, Anda perlu menentukan kelas baru untuk metode ini.

  4. Lakukan tugas berikut untuk setiap <FUNCTION_NAME> folder dalam proyek asli Anda:

    1. Buat file baru bernama <FUNCTION_NAME>.cs, ganti <FUNCTION_NAME> dengan nama folder yang menentukan fungsi skrip C# Anda. Anda dapat membuat file kode fungsi baru dari salah satu templat khusus pemicu dengan cara berikut:

      func new --name <FUNCTION_NAME> Menggunakan perintah dan memilih templat pemicu yang benar pada prompt.

    2. using Salin pernyataan dari file Anda run.csx dan tambahkan ke file baru. Anda tidak memerlukan direktif apa pun #r .

    3. Untuk pernyataan apa pun #load dalam file Anda run.csx , tambahkan pernyataan baru using untuk namespace yang Anda gunakan untuk kode bersama.

    4. Dalam file baru, tentukan kelas untuk fungsi Anda di bawah namespace layanan yang Anda gunakan untuk proyek.

    5. Buat metode baru bernama RunHandler atau sesuatu yang serupa. Metode baru ini berfungsi sebagai titik masuk baru untuk fungsi .

    6. Salin metode statis yang mewakili fungsi Anda, bersama dengan fungsi apa pun yang dipanggilnya, dari run.csx ke kelas baru Anda sebagai metode kedua. Dari metode baru yang Anda buat di langkah sebelumnya, panggil metode statis ini. Langkah tidak langsung ini berguna untuk menavigasi perbedaan apa pun saat Anda melanjutkan peningkatan. Anda dapat menjaga metode asli tetap sama persis dan hanya mengontrol inputnya dari konteks baru. Anda mungkin perlu membuat parameter pada metode baru yang kemudian Anda teruskan ke panggilan metode statis. Setelah mengonfirmasi bahwa migrasi telah berfungsi seperti yang dimaksudkan, Anda dapat menghapus tingkat tidak langsung tambahan ini.

    7. Untuk setiap pengikatan dalam function.json file, tambahkan atribut yang sesuai ke metode baru Anda. Untuk menemukan contoh pengikatan dengan cepat, lihat Menambahkan pengikatan secara manual berdasarkan contoh.

    8. Tambahkan paket ekstensi apa pun yang diperlukan oleh pengikatan ke proyek Anda, jika Anda belum melakukannya.

  5. Buat ulang pengaturan aplikasi apa pun yang diperlukan oleh aplikasi Anda dalam Values kumpulan file local.settings.json.

  6. Verifikasi bahwa proyek Anda berjalan secara lokal:

    Gunakan func start untuk menjalankan aplikasi Anda dari baris perintah. Untuk informasi selengkapnya, lihat Menjalankan fungsi secara lokal.

  7. Terbitkan proyek Anda ke aplikasi fungsi baru di Azure:

    Buat sumber daya Azure Anda dan sebarkan proyek kode ke Azure dengan menggunakan func azure functionapp publish <APP_NAME> perintah . Untuk informasi selengkapnya, lihat Menyebarkan file proyek.

Contoh konversi fungsi

Bagian ini memperlihatkan contoh migrasi untuk satu fungsi.

Fungsi asli dalam pembuatan skrip C# memiliki dua file:

  • HelloWorld/function.json
  • HelloWorld/run.csx

Konten dari HelloWorld/function.json adalah:

{
  "bindings": [
    {
      "authLevel": "FUNCTION",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ]
}

Konten dari HelloWorld/run.csx adalah:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string name = req.Query["name"];

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;

    string responseMessage = string.IsNullOrEmpty(name)
        ? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
                : $"Hello, {name}. This HTTP triggered function executed successfully.";

            return new OkObjectResult(responseMessage);
}

Setelah bermigrasi ke model pekerja terisolasi dengan integrasi ASP.NET Core, ini digantikan oleh satu HelloWorld.cs:

using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

namespace MyFunctionApp
{
    public class HelloWorld
    {
        private readonly ILogger _logger;

        public HelloWorld(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<HelloWorld>();
        }

        [Function("HelloWorld")]
        public async Task<IActionResult> RunHandler([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
        {
            return await Run(req, _logger);
        }

        // From run.csx
        public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            name = name ?? data?.name;

            string responseMessage = string.IsNullOrEmpty(name)
                ? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
                        : $"Hello, {name}. This HTTP triggered function executed successfully.";

            return new OkObjectResult(responseMessage);
        }
    }
}

Konfigurasi dan contoh pengikatan

Bagian ini berisi referensi dan contoh untuk menentukan pemicu dan pengikatan dalam skrip C#.

Pemicu blob

Tabel berikut menjelaskan properti konfigurasi pengikatan untuk skrip C# yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke blobTrigger. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
arah Harus diatur ke in. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
nama Nama variabel yang mewakili blob dalam kode fungsi.
jalan Kontainer yang dipantau. Mungkin pola nama blob.
koneksi Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara terhubung ke Blob Azure. Lihat Koneksi.

Contoh berikut menunjukkan definisi pemicu blob dalam file function.json dan kode yang menggunakan pengikatan. Fungsi ini menulis log ketika blob ditambahkan atau diperbarui dalam kontainer samples-workitemscontainer.

Berikut data pengikatan dalam file function.json:

{
    "disabled": false,
    "bindings": [
        {
            "name": "myBlob",
            "type": "blobTrigger",
            "direction": "in",
            "path": "samples-workitems/{name}",
            "connection":"MyStorageAccountAppSetting"
        }
    ]
}

Untai (karakter) {name} dalam jalur pemicu blob samples-workitems/{name} membuat ekspresi pengikatan yang dapat Anda gunakan dalam kode fungsi untuk mengakses nama file pemicu blob. Untuk informasi selengkapnya, lihat Pola nama blob.

Berikut kode skrip C# yang mengikat untuk Stream:

public static void Run(Stream myBlob, string name, ILogger log)
{
   log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}

Berikut kode skrip C# yang mengikat untuk CloudBlockBlob:

#r "Microsoft.WindowsAzure.Storage"

using Microsoft.WindowsAzure.Storage.Blob;

public static void Run(CloudBlockBlob myBlob, string name, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name}\nURI:{myBlob.StorageUri}");
}

Input blob

Tabel berikut menjelaskan properti konfigurasi pengikatan untuk skrip C# yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke blob.
arah Harus diatur ke in.
nama Nama variabel yang mewakili blob dalam kode fungsi.
jalan Jalan menuju blob.
koneksi Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara terhubung ke Blob Azure. Lihat Koneksi.

Contoh berikut menunjukkan pengikatan input dan output blob dalam file function.json dan kode skrip C# yang menggunakan pengikatan. Fungsi ini membuat salinan blob teks. Fungsi ini dipicu oleh pesan antrean yang berisi nama blob untuk disalin. Blob baru bernama {originalblobname}-Copy.

Dalam file function.json, properti metadata queueTrigger digunakan untuk menentukan nama blob dalam properti path:

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "myQueueItem",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "myInputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "name": "myOutputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}-Copy",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ],
  "disabled": false
}

Berikut kode skrip C#:

public static void Run(string myQueueItem, string myInputBlob, out string myOutputBlob, ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
    myOutputBlob = myInputBlob;
}

Output blob

Tabel berikut menjelaskan properti konfigurasi pengikatan untuk skrip C# yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke blob.
arah Harus diatur ke out.
nama Nama variabel yang mewakili blob dalam kode fungsi.
jalan Jalan menuju blob.
koneksi Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara terhubung ke Blob Azure. Lihat Koneksi.

Contoh berikut menunjukkan pengikatan input dan output blob dalam file function.json dan kode skrip C# yang menggunakan pengikatan. Fungsi ini membuat salinan blob teks. Fungsi ini dipicu oleh pesan antrean yang berisi nama blob untuk disalin. Blob baru bernama {originalblobname}-Copy.

Dalam file function.json, properti metadata queueTrigger digunakan untuk menentukan nama blob dalam properti path:

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "myQueueItem",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "myInputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "name": "myOutputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}-Copy",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ],
  "disabled": false
}

Berikut kode skrip C#:

public static void Run(string myQueueItem, string myInputBlob, out string myOutputBlob, ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
    myOutputBlob = myInputBlob;
}

Pemicu RabbitMQ

Contoh berikut menunjukkan pengikatan pemicu RabbitMQ dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini membaca dan mencatat pesan RabbitMQ.

Berikut data pengikatan dalam file function.json:

{​​
    "bindings": [
        {​​
            "name": "myQueueItem",
            "type": "rabbitMQTrigger",
            "direction": "in",
            "queueName": "queue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting"
        }​​
    ]
}​​

Berikut kode skrip C#:

using System;

public static void Run(string myQueueItem, ILogger log)
{​​
    log.LogInformation($"C# Script RabbitMQ trigger function processed: {​​myQueueItem}​​");
}​​

Pemicu antrean

Tabel berikut menjelaskan properti konfigurasi pengikatan untuk skrip C# yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke queueTrigger. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
arah Hanya di file function.json. Harus diatur ke in. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
nama Nama variabel yang berisi payload item antrean dalam kode fungsi.
queueName Nama antrean untuk polling.
koneksi Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara terhubung ke Azure Queue. Lihat Koneksi.

Contoh berikut menunjukkan pengikatan pemicu antrean dalam file function.json dan kode skrip C# yang menggunakan pengikatan. Fungsi ini memilih myqueue-items antrean dan menulis log setiap kali item antrean diproses.

Berikut adalah file function.json:

{
    "disabled": false,
    "bindings": [
        {
            "type": "queueTrigger",
            "direction": "in",
            "name": "myQueueItem",
            "queueName": "myqueue-items",
            "connection":"MyStorageConnectionAppSetting"
        }
    ]
}

Berikut kode skrip C#:

#r "Microsoft.WindowsAzure.Storage"

using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Queue;
using System;

public static void Run(CloudQueueMessage myQueueItem, 
    DateTimeOffset expirationTime, 
    DateTimeOffset insertionTime, 
    DateTimeOffset nextVisibleTime,
    string queueTrigger,
    string id,
    string popReceipt,
    int dequeueCount,
    ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem.AsString}\n" +
        $"queueTrigger={queueTrigger}\n" +
        $"expirationTime={expirationTime}\n" +
        $"insertionTime={insertionTime}\n" +
        $"nextVisibleTime={nextVisibleTime}\n" +
        $"id={id}\n" +
        $"popReceipt={popReceipt}\n" + 
        $"dequeueCount={dequeueCount}");
}

Output antrean

Tabel berikut menjelaskan properti konfigurasi pengikatan untuk skrip C# yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke queue. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
arah Harus diatur ke out. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
nama Nama variabel yang mewakili antrean dalam kode fungsi. Atur ke $return untuk mereferensi nilai pengembalian fungsi.
queueName Nama antrean.
koneksi Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara terhubung ke Azure Queue. Lihat Koneksi.

Contoh berikut menunjukkan pengikatan pemicu HTTP dalam file function.json dan kode skrip C# yang menggunakan pengikatan. Fungsi ini membuat item antrean dengan payload objek CustomQueueMessage untuk setiap permintaan HTTP yang diterima.

Berikut adalah file function.json:

{
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "authLevel": "function",
      "name": "input"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    },
    {
      "type": "queue",
      "direction": "out",
      "name": "$return",
      "queueName": "outqueue",
      "connection": "MyStorageConnectionAppSetting"
    }
  ]
}

Berikut kode skrip C# yang membuat satu pesan antrean:

public class CustomQueueMessage
{
    public string PersonName { get; set; }
    public string Title { get; set; }
}

public static CustomQueueMessage Run(CustomQueueMessage input, ILogger log)
{
    return input;
}

Anda dapat mengirim beberapa pesan sekaligus dengan menggunakan ICollector atau IAsyncCollector parameter. Berikut kode skrip C# yang mengirim beberapa pesan, satu dengan data permintaan HTTP dan satu dengan nilai yang dikodekan secara permanen:

public static void Run(
    CustomQueueMessage input, 
    ICollector<CustomQueueMessage> myQueueItems, 
    ILogger log)
{
    myQueueItems.Add(input);
    myQueueItems.Add(new CustomQueueMessage { PersonName = "You", Title = "None" });
}

Input tabel

Bagian ini menguraikan dukungan untuk versi Tables API dari ekstensi saja.

Tabel berikut menjelaskan properti konfigurasi pengikatan untuk skrip C# yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke table. Properti ini diatur secara otomatis saat Anda membuat pengikatan di portal Microsoft Azure.
arah Harus diatur ke in. Properti ini diatur secara otomatis saat Anda membuat pengikatan di portal Microsoft Azure.
nama Nama variabel yang mewakili tabel atau entitas dalam kode fungsi.
tableName Nama tabel.
partitionKey Opsional. Kunci partisi entitas tabel untuk dibaca.
rowKey Opsional. Tombol baris entitas tabel untuk dibaca. Tidak dapat digunakan dengan take atau filter.
take Opsional. Jumlah maksimum entitas yang akan dimunculkan. Tidak dapat digunakan dengan rowKey.
filter Opsional. Ekspresi filter OData agar entitas muncul dari tabel. Tidak dapat digunakan dengan rowKey.
koneksi Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara tersambung ke layanan tabel. Lihat Koneksi.

Contoh berikut menunjukkan pengikatan input tabel dalam file function.json dan kode skrip C# yang menggunakan pengikatan. Fungsi ini menggunakan pemicu antrean untuk membaca satu baris tabel.

File function.json menentukan partitionKey dan rowKey. {queueTrigger} dengan nilai rowKey menunjukkan bahwa tombol baris berasal dari string pesan antrean.

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "myQueueItem",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "personEntity",
      "type": "table",
      "tableName": "Person",
      "partitionKey": "Test",
      "rowKey": "{queueTrigger}",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    }
  ],
  "disabled": false
}

Berikut kode skrip C#:

#r "Azure.Data.Tables"
using Microsoft.Extensions.Logging;
using Azure.Data.Tables;

public static void Run(string myQueueItem, Person personEntity, ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
    log.LogInformation($"Name in Person entity: {personEntity.Name}");
}

public class Person : ITableEntity
{
    public string Name { get; set; }

    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public DateTimeOffset? Timestamp { get; set; }
    public ETag ETag { get; set; }
}

Output tabel

Bagian ini menguraikan dukungan untuk versi Tables API dari ekstensi saja.

Tabel berikut menjelaskan properti konfigurasi pengikatan untuk skrip C# yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke table. Properti ini diatur secara otomatis saat Anda membuat pengikatan di portal Microsoft Azure.
arah Harus diatur ke out. Properti ini diatur secara otomatis saat Anda membuat pengikatan di portal Microsoft Azure.
nama Nama variabel yang digunakan dalam kode fungsi yang mewakili tabel atau entitas. Atur ke $return untuk mereferensi nilai pengembalian fungsi.
tableName Nama tabel tempat menulis.
partitionKey Kunci partisi entitas tabel untuk menulis.
rowKey Tombol baris entitas tabel untuk menulis.
koneksi Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara tersambung ke layanan tabel. Lihat Koneksi.

Contoh berikut menunjukkan pengikatan output tabel dalam file function.json dan kode skrip C# yang menggunakan pengikatan. Fungsi ini menulis beberapa entitas tabel.

Berikut adalah file function.json:

{
  "bindings": [
    {
      "name": "input",
      "type": "manualTrigger",
      "direction": "in"
    },
    {
      "tableName": "Person",
      "connection": "MyStorageConnectionAppSetting",
      "name": "tableBinding",
      "type": "table",
      "direction": "out"
    }
  ],
  "disabled": false
}

Berikut kode skrip C#:

public static void Run(string input, ICollector<Person> tableBinding, ILogger log)
{
    for (int i = 1; i < 10; i++)
        {
            log.LogInformation($"Adding Person entity {i}");
            tableBinding.Add(
                new Person() { 
                    PartitionKey = "Test", 
                    RowKey = i.ToString(), 
                    Name = "Name" + i.ToString() }
                );
        }

}

public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
}

Pemicu pengatur waktu

Tabel berikut menjelaskan properti konfigurasi pengikatan untuk skrip C# yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke timerTrigger. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
arah Harus diatur ke in. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
nama Nama variabel yang mewakili objek timer dalam kode fungsi.
jadwal Ekspresi CRON atau nilai TimeSpan. TimeSpan hanya dapat digunakan untuk aplikasi fungsi yang berjalan pada Paket Layanan Aplikasi. Anda dapat meletakkan ekspresi jadwal dalam pengaturan aplikasi dan mengatur properti ini ke nama pengaturan aplikasi yang dibungkus dalam % tanda, seperti dalam contoh ini: "%ScheduleAppSetting%".
runOnStartup Jika true, fungsi dipanggil ketika runtime dimulai. Misalnya, runtime dimulai saat aplikasi fungsi bangun setelah menganggur karena tidak aktif. ketika aplikasi fungsi dimulai ulang karena perubahan fungsi, dan saat peluasan skala aplikasi fungsi. Gunakan dengan hati-hati. runOnStartup jarang diatur ke true, terutama dalam produksi.
useMonitor Atur true ke false atau untuk menunjukkan apakah jadwal harus dipantau. Pemantauan jadwal tetap terjadi jadwal untuk membantu memastikan jadwal dipertahankan dengan benar bahkan ketika instans aplikasi fungsi dimulai ulang. Jika tidak diatur secara eksplisit, defaultnya true adalah untuk jadwal yang memiliki interval pengulangan lebih besar dari atau sama dengan 1 menit. Untuk jadwal yang memicu lebih dari sekali per menit, defaultnya adalah false.

Contoh berikut menunjukkan pengikatan pemicu timer dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini menulis log yang menunjukkan apakah pemanggilan fungsi ini disebabkan oleh kemunculan jadwal yang terlewat. Objek TimerInfo diteruskan ke dalam fungsi.

Berikut data pengikatan dalam file function.json:

{
    "schedule": "0 */5 * * * *",
    "name": "myTimer",
    "type": "timerTrigger",
    "direction": "in"
}

Berikut kode skrip C#:

public static void Run(TimerInfo myTimer, ILogger log)
{
    if (myTimer.IsPastDue)
    {
        log.LogInformation("Timer is running late!");
    }
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}" );  
}

Pemicu HTTP

Tabel berikut menjelaskan properti konfigurasi pemicu yang Anda atur di file function.json:

Properti function.json Deskripsi
jenis Wajib - harus diatur ke httpTrigger.
arah Wajib - harus diatur ke in.
nama Wajib - nama variabel yang digunakan dalam kode fungsi untuk permintaan atau isi permintaan.
authLevel Menentukan kunci apa, jika ada, yang perlu ada pada permintaan untuk menjalankan fungsi. Untuk nilai yang didukung, lihat Tingkat otorisasi.
metode Larik metode HTTP yang direspons oleh fungsi. Jika tidak ditentukan, fungsi merespons semua metode HTTP. Lihat mengkustomisasi titik akhir HTTP.
rute Mendefinisikan templat rute, mengontrol URL permintaan mana yang merespons fungsi Anda. Nilai default jika tidak ada yang disediakan adalah <functionname>. Untuk informasi selengkapnya, lihat mengkustomisasi titik akhir HTTP.
webHookType Hanya didukung untuk runtime versi 1.x.

Mengonfigurasi pemicu HTTP untuk bertindak sebagai penerima webhook untuk penyedia yang ditentukan. Untuk nilai yang didukung, lihat Jenis WebHook.

Contoh berikut menunjukkan pengikatan pemicu dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini mencari name parameter baik dalam string kueri atau isi permintaan HTTP.

Berikut adalah file function.json:

{
    "disabled": false,
    "bindings": [
        {
            "authLevel": "function",
            "name": "req",
            "type": "httpTrigger",
            "direction": "in",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "name": "$return",
            "type": "http",
            "direction": "out"
        }
    ]
}

Berikut kode skrip C# yang mengikat untuk HttpRequest:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string name = req.Query["name"];
    
    string requestBody = String.Empty;
    using (StreamReader streamReader =  new  StreamReader(req.Body))
    {
        requestBody = await streamReader.ReadToEndAsync();
    }
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;
    
    return name != null
        ? (ActionResult)new OkObjectResult($"Hello, {name}")
        : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}

Anda dapat mengikat ke objek kustom, alih-alih HttpRequest. Objek ini dibuat dari isi permintaan dan diurai sebagai JSON. Demikian pula, jenis dapat diteruskan ke pengikatan output respons HTTP dan dikembalikan sebagai isi respons, bersama dengan kode status 200.

using System.Net;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;

public static string Run(Person person, ILogger log)
{   
    return person.Name != null
        ? (ActionResult)new OkObjectResult($"Hello, {person.Name}")
        : new BadRequestObjectResult("Please pass an instance of Person.");
}

public class Person {
     public string Name {get; set;}
}

Output HTTP

Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.

Properti Deskripsi
jenis Harus diatur ke http.
arah Harus diatur ke out.
nama Nama variabel yang digunakan dalam kode fungsi untuk respons, $return atau untuk menggunakan nilai yang dikembalikan.

Pemicu Azure Event Hubs

Tabel berikut menjelaskan properti konfigurasi pemicu yang Anda atur di file function.json:

Properti function.json Deskripsi
jenis Harus diatur ke eventHubTrigger. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
arah Harus diatur ke in. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
nama Nama variabel yang mewakili blob dalam kode fungsi.
eventHubName Functions 2.x dan yang lebih tinggi. Nama event hub. Ketika nama event hub juga ada dalam string koneksi, nilai tersebut menimpa properti ini di runtime. Dapat direferensikan melalui pengaturan aplikasi%eventHubName%. Dalam versi 1.x, properti ini diberi nama path.
consumerGroup Properti opsional yang mengatur grup konsumen yang digunakan untuk berlangganan ke acara di hub. Jika dihilangkan, grup konsumen $Default digunakan.
koneksi Nama pengaturan aplikasi atau kumpulan pengaturan yang menentukan cara menyambungkan ke Azure Event Hubs. Lihat Koneksi.

Contoh berikut menunjukkan pengikatan pemicu Azure Event Hubs dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini mencatat isi pesan pemicu Azure Event Hubs.

Contoh berikut menunjukkan data pengikatan Pusat Aktivitas dalam file function.json untuk runtime Functions versi 2.x dan versi yang lebih baru.

{
  "type": "eventHubTrigger",
  "name": "myEventHubMessage",
  "direction": "in",
  "eventHubName": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

Berikut kode skrip C#:

using System;

public static void Run(string myEventHubMessage, TraceWriter log)
{
    log.Info($"C# function triggered to process a message: {myEventHubMessage}");
}

Untuk mendapatkan akses ke metadata peristiwa dalam kode fungsi, ikat ke objek EventData . Anda juga dapat mengakses properti yang sama dengan menggunakan ekspresi pengikatan dalam tanda tangan metode. Contoh berikut ini memperlihatkan kedua cara untuk mendapatkan data yang sama:

#r "Microsoft.Azure.EventHubs"

using System.Text;
using System;
using Microsoft.ServiceBus.Messaging;
using Microsoft.Azure.EventHubs;

public void Run(EventData myEventHubMessage,
    DateTime enqueuedTimeUtc,
    Int64 sequenceNumber,
    string offset,
    TraceWriter log)
{
    log.Info($"Event: {Encoding.UTF8.GetString(myEventHubMessage.Body)}");
    log.Info($"EnqueuedTimeUtc={myEventHubMessage.SystemProperties.EnqueuedTimeUtc}");
    log.Info($"SequenceNumber={myEventHubMessage.SystemProperties.SequenceNumber}");
    log.Info($"Offset={myEventHubMessage.SystemProperties.Offset}");

    // Metadata accessed by using binding expressions
    log.Info($"EnqueuedTimeUtc={enqueuedTimeUtc}");
    log.Info($"SequenceNumber={sequenceNumber}");
    log.Info($"Offset={offset}");
}

Untuk menerima acara dalam batch, buat string atau EventData array:

public static void Run(string[] eventHubMessages, TraceWriter log)
{
    foreach (var message in eventHubMessages)
    {
        log.Info($"C# function triggered to process a message: {message}");
    }
}

Output Azure Event Hubs

Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke eventHub.
arah Harus diatur ke out. Parameter ini diatur secara otomatis saat Anda membuat pengikatan di portal Azure.
nama Nama variabel yang digunakan dalam kode fungsi yang mewakili acara.
eventHubName Functions 2.x dan yang lebih tinggi. Nama event hub. Ketika nama event hub juga ada dalam string koneksi, nilai tersebut menimpa properti ini di runtime. Di Functions 1.x, properti ini bernama path.
koneksi Nama pengaturan aplikasi atau kumpulan pengaturan yang menentukan cara menyambungkan ke Azure Event Hubs. Untuk mempelajari selengkapnya, lihat Koneksi.

Contoh berikut menunjukkan pengikatan pemicu hub peristiwa dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini menulis pesan ke hub acara.

Contoh berikut menunjukkan data pengikatan Pusat Aktivitas dalam file function.json untuk runtime Functions versi 2.x dan versi yang lebih baru.

{
    "type": "eventHub",
    "name": "outputEventHubMessage",
    "eventHubName": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}

Berikut kode skrip C# yang membuat satu pesan:

using System;
using Microsoft.Extensions.Logging;

public static void Run(TimerInfo myTimer, out string outputEventHubMessage, ILogger log)
{
    String msg = $"TimerTriggerCSharp1 executed at: {DateTime.Now}";
    log.LogInformation(msg);   
    outputEventHubMessage = msg;
}

Berikut kode skrip C# yang membuat banyak pesan:

public static void Run(TimerInfo myTimer, ICollector<string> outputEventHubMessage, ILogger log)
{
    string message = $"Message created at: {DateTime.Now}";
    log.LogInformation(message);
    outputEventHubMessage.Add("1 " + message);
    outputEventHubMessage.Add("2 " + message);
}

Pemicu Event Grid

Tabel berikut menjelaskan properti konfigurasi pengikatan untuk skrip C# yang Anda atur di file function.json. Tidak ada parameter konstruktor atau properti yang diatur dalam EventGridTrigger atribut.

Properti function.json Deskripsi
jenis Wajib - harus diatur ke eventGridTrigger.
arah Wajib - harus diatur ke in.
nama Diperlukan - nama variabel yang digunakan dalam kode fungsi untuk parameter yang menerima data peristiwa.

Contoh berikut menunjukkan pemicu Event Grid yang ditentukan dalam file function.json.

Berikut data pengikatan dalam file function.json:

{
  "bindings": [
    {
      "type": "eventGridTrigger",
      "name": "eventGridEvent",
      "direction": "in"
    }
  ],
  "disabled": false
}

Berikut adalah contoh fungsi skrip C# yang menggunakan parameter pengikatan EventGridEvent:

#r "Azure.Messaging.EventGrid"
using Azure.Messaging.EventGrid;
using Microsoft.Extensions.Logging;

public static void Run(EventGridEvent eventGridEvent, ILogger log)
{
    log.LogInformation(eventGridEvent.Data.ToString());
}

Berikut adalah contoh fungsi skrip C# yang menggunakan parameter pengikatan JObject:

#r "Newtonsoft.Json"

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public static void Run(JObject eventGridEvent, TraceWriter log)
{
    log.Info(eventGridEvent.ToString(Formatting.Indented));
}

Output Event Grid

Tabel berikut menjelaskan properti konfigurasi pengikatan untuk skrip C# yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke eventGrid.
arah Harus diatur ke out. Parameter ini diatur secara otomatis saat Anda membuat pengikatan di portal Azure.
nama Nama variabel yang digunakan dalam kode fungsi yang mewakili acara.
topicEndpointUri Nama pengaturan aplikasi yang berisi URI untuk topik kustom, seperti MyTopicEndpointUri.
topikKeySetting Nama setelan aplikasi yang berisi kunci akses untuk topik kustom.

Contoh berikut menunjukkan data pengikatan output Azure Event Grid di file function.json.

{
    "type": "eventGrid",
    "name": "outputEvent",
    "topicEndpointUri": "MyEventGridTopicUriSetting",
    "topicKeySetting": "MyEventGridTopicKeySetting",
    "direction": "out"
}

Berikut kode skrip C# yang membuat satu kejadian:

#r "Microsoft.Azure.EventGrid"
using System;
using Microsoft.Azure.EventGrid.Models;
using Microsoft.Extensions.Logging;

public static void Run(TimerInfo myTimer, out EventGridEvent outputEvent, ILogger log)
{
    outputEvent = new EventGridEvent("message-id", "subject-name", "event-data", "event-type", DateTime.UtcNow, "1.0");
}

Berikut kode skrip C# yang membuat beberapa kejadian:

#r "Microsoft.Azure.EventGrid"
using System;
using Microsoft.Azure.EventGrid.Models;
using Microsoft.Extensions.Logging;

public static void Run(TimerInfo myTimer, ICollector<EventGridEvent> outputEvent, ILogger log)
{
    outputEvent.Add(new EventGridEvent("message-id-1", "subject-name", "event-data", "event-type", DateTime.UtcNow, "1.0"));
    outputEvent.Add(new EventGridEvent("message-id-2", "subject-name", "event-data", "event-type", DateTime.UtcNow, "1.0"));
}

Pemicu Azure Service Bus

Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke serviceBusTrigger. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
arah Harus diatur ke in. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
nama Nama variabel yang mewakili antrean atau pesan topik dalam kode fungsi.
queueName Nama antrean untuk dipantau. Atur hanya saat memantau antrean, bukan untuk topik.
topicName Nama topik yang akan dipantau. Atur hanya saat memantau antrean, bukan untuk topik.
subscriptionName Nama langganan yang akan dipantau. Atur hanya saat memantau antrean, bukan untuk topik.
koneksi Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara terhubung ke Azure Service Bus. Lihat Koneksi.
accessRights Hak akses untuk string koneksi. Nilai yang tersedia adalah manage dan listen. Defaultnya adalah manage, yang menunjukkan bahwa connection memiliki izin Kelola. Jika Anda menggunakan string koneksi yang tidak memiliki izin Kelola, atur accessRights ke "dengarkan". Jika tidak, runtime Azure Functions mungkin gagal melakukan operasi yang memerlukan hak kelola. Di Azure Functions versi 2.x dan yang lebih tinggi, properti ini tidak tersedia karena versi terbaru Bus Layanan SDK tidak mendukung operasi kelola.
isSessionsEnabled true jika menghubungkan ke antrean atau langganan berbasis sesi. false jika tidak, yang merupakan nilai default.
autoComplete true ketika pemicu harus secara otomatis menyelesaikan panggilan setelah pemrosesan, atau jika kode fungsi secara manual akan menyelesaikan panggilan.

Pengaturan ke false hanya didukung di C#.

Jika diatur ke true, pemicu menyelesaikan pesan secara otomatis jika eksekusi fungsi berhasil diselesaikan, dan mengabaikan pesan sebaliknya.
<br/Ketika diatur ke false, Anda bertanggung jawab untuk memanggil metode ServiceBusReceiver untuk menyelesaikan, mengabaikan, atau mematikan pesan, sesi, atau batch. Jika pengecualian dilemparkan (dan tidak ada metode ServiceBusReceiver yang dipanggil), maka kunci tetap ada. Setelah kunci kedaluwarsa, pesan diantre kembali dengan DeliveryCount tahapan dan kunci diperbarui secara otomatis.

Properti ini hanya tersedia di Azure Functions 2.x dan yang lebih tinggi.

Contoh berikut menunjukkan pengikatan pemicu Bus Layanan dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini membaca metadata pesan dan mencatat pesan antrean Bus Layanan.

Berikut data pengikatan dalam file function.json:

{
"bindings": [
    {
    "queueName": "testqueue",
    "connection": "MyServiceBusConnection",
    "name": "myQueueItem",
    "type": "serviceBusTrigger",
    "direction": "in"
    }
],
"disabled": false
}

Berikut kode skrip C#:

using System;

public static void Run(string myQueueItem,
    Int32 deliveryCount,
    DateTime enqueuedTimeUtc,
    string messageId,
    TraceWriter log)
{
    log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");

    log.Info($"EnqueuedTimeUtc={enqueuedTimeUtc}");
    log.Info($"DeliveryCount={deliveryCount}");
    log.Info($"MessageId={messageId}");
}

output Bus Layanan

Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke serviceBus. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
arah Harus diatur ke out. Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
nama Nama variabel yang mewakili antrean atau pesan topik dalam kode fungsi. Atur ke "$return" untuk mereferensikan nilai pengembalian fungsi.
queueName Nama antrean. Atur hanya jika mengirim pesan antrean, bukan untuk topik.
topicName Nama topik. Atur hanya jika mengirim pesan topik, bukan untuk antrean.
koneksi Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara terhubung ke Azure Service Bus. Lihat Koneksi.
accessRights (hanya v1) Hak akses untuk string koneksi. Nilai yang tersedia adalah manage dan listen. Defaultnya adalah manage, yang menunjukkan bahwa connection memiliki izin Kelola. Jika Anda menggunakan string koneksi yang tidak memiliki izin Kelola, atur accessRights ke "dengarkan". Jika tidak, runtime Azure Functions mungkin gagal melakukan operasi yang memerlukan hak kelola. Di Azure Functions versi 2.x dan yang lebih tinggi, properti ini tidak tersedia karena versi terbaru Bus Layanan SDK tidak mendukung operasi kelola.

Contoh berikut menunjukkan pengikatan output Bus Layanan dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini menggunakan pemicu timer untuk mengirim pesan antrean setiap 15 detik.

Berikut data pengikatan dalam file function.json:

{
    "bindings": [
        {
            "schedule": "0/15 * * * * *",
            "name": "myTimer",
            "runsOnStartup": true,
            "type": "timerTrigger",
            "direction": "in"
        },
        {
            "name": "outputSbQueue",
            "type": "serviceBus",
            "queueName": "testqueue",
            "connection": "MyServiceBusConnection",
            "direction": "out"
        }
    ],
    "disabled": false
}

Berikut kode skrip C# yang membuat satu pesan:

public static void Run(TimerInfo myTimer, ILogger log, out string outputSbQueue)
{
    string message = $"Service Bus queue message created at: {DateTime.Now}";
    log.LogInformation(message); 
    outputSbQueue = message;
}

Berikut kode skrip C# yang membuat banyak pesan:

public static async Task Run(TimerInfo myTimer, ILogger log, IAsyncCollector<string> outputSbQueue)
{
    string message = $"Service Bus queue messages created at: {DateTime.Now}";
    log.LogInformation(message); 
    await outputSbQueue.AddAsync("1 " + message);
    await outputSbQueue.AddAsync("2 " + message);
}

Pemicu Azure Cosmos DB v2

Bagian ini menguraikan dukungan hanya untuk ekstensi versi 4.x+.

Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke cosmosDBTrigger.
arah Harus diatur ke in. Parameter ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure.
nama Nama variabel yang digunakan dalam kode fungsi yang mewakili daftar dokumen dengan perubahan.
koneksi Nama pengaturan aplikasi atau koleksi aplikasi yang menentukan cara terhubung ke akun Azure Cosmos DB yang sedang dipantau. Untuk informasi selengkapnya, lihat Sambungan.
databaseName Nama database Azure Cosmos DB dengan koleksi sedang dalam pemantauan.
containerName Nama kontainer yang sedang dipantau.
leaseConnection (Opsional) Nama pengaturan aplikasi atau kontainer pengaturan yang menentukan cara untuk terhubung pada akun Azure Cosmos DB, yang menyimpan kontainer sewa.

Saat tidak diatur, nilai connection akan digunakan. Parameter ini secara otomatis diatur saat pengikatan dibuat di portal. String koneksi untuk kontainer sewa harus memiliki izin tulis.
leaseDatabaseName (Opsional) Nama database yang menyimpan kontainer digunakan untuk menyimpan sewa. Saat tidak diatur, nilai databaseName pengaturan digunakan.
leaseContainerName (Opsional) Nama kontainer yang digunakan untuk menyimpan sewa. Saat tidak diatur, nilai leases akan digunakan.
createLeaseContainerIfNotExists (Opsional) Saat diatur ke true, kontainer sewa secara otomatis dibuat jika belum tersedia. Nilai defaultnya adalah false. Saat menggunakan identitas Microsoft Entra jika Anda mengatur nilai ke true, membuat kontainer bukanlah operasi yang diizinkan dan Fungsi Anda tidak akan dapat dimulai.
leasesContainerThroughput (Opsional) Menentukan jumlah Unit Permintaan yang akan ditetapkan ketika kontainer sewa dibuat. Pengaturan ini hanya digunakan saat createLeaseContainerIfNotExists diatur ke true. Parameter ini secara otomatis diatur saat pengikatan dibuat menggunakan portal.
leaseContainerPrefix (Opsional) Saat diatur, nilai akan ditambahkan sebagai prefiks untuk sewa yang dibuat dalam kontainer Sewa bagi fungsi ini. Menggunakan prefiks akan memungkinkan dua Azure Functions yang terpisah berbagi kontainer Sewa yang sama dengan menggunakan prefiks yang berbeda.
feedPollDelay (Opsional) Waktu (dalam milidetik) untuk penundaan antara poling partisi untuk perubahan baru pada umpan, setelah semua perubahan terkini dikosongkan. Defaultnya adalah 5.000 milidetik, atau 5 detik.
leaseAcquireInterval (Opsional) Saat diatur, properti ini mendefinisikan, dalam milidetik, interval memulai tugas yang akan dikomputasi jika partisi didistribusikan secara merata di antara instans host yang dikenal. Defaultnya adalah 13000 (13 detik).
leaseExpirationInterval (Opsional) Saat diatur, properti ini mendefinisikan, dalam milidetik, interval saat sewa diambil dari sewa yang mewakili partisi. Jika sewa tidak diperpanjang dalam interval ini, maka akan menyebabkan kedaluwarsa dan kepemilikan partisi akan pindah ke instans lain. Defaultnya adalah 60000 (60 detik).
leaseRenewInterval (Opsional) Saat diatur, properti ini mendefinisikan, dalam milidetik, interval perpanjangan semua sewa untuk partisi yang saat ini dipegang oleh instans. Defaultnya adalah 17000 (17 detik).
maxItemsPerInvocation (Opsional) Saat diatur, properti ini menetapkan jumlah maksimum item yang diterima per panggilan Fungsi. Jika operasi di dalam koleksi terpantau dilakukan melalui prosedur yang disimpan, cakupan transaksi akan dipertahankan saat membaca item dari umpan perubahan. Akibatnya, jumlah item yang diterima bisa lebih tinggi dari nilai yang ditentukan sehingga item yang diubah oleh transaksi yang sama ditampilkan sebagai bagian dari satu batch atomik.
startFromBeginning (Opsional) Opsi ini memberi tahu Pemicu untuk membaca perubahan dari awal riwayat perubahan koleksi, dan bukan dimulai pada waktu terkini. Membaca dari awal hanya berfungsi saat pemicu dimulai, karena dalam proses berikutnya, titik pemeriksaan sudah disimpan. Mengatur opsi ini ke true saat ada sewa yang sudah dibuat tidak berpengaruh.
startFromTime (Opsional) Mendapatkan atau mengatur tanggal dan waktu untuk menginisialisasi operasi baca bagi umpan perubahan. Format yang disarankan adalah ISO 8601, dengan pendesain UTC seperti 2021-02-16T14:19:29Z. Format ini hanya digunakan untuk mengatur status pemicu awal. Setelah pemicu memiliki status sewa, pengubahan nilai ini tidak akan berpengaruh.
preferredLocations (Opsional) Menentukan lokasi (wilayah) pilihan untuk akun database yang direplikasi geografis di layanan Azure Cosmos DB. Nilai harus dipisahkan koma. Misalnya, "AS Timur, AS Tengah Selatan, Eropa Utara".

Contoh berikut menunjukkan pengikatan pemicu Azure Cosmos DB dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini menulis pesan log saat rekaman Azure Cosmos DB ditambahkan atau dimodifikasi.

Berikut data pengikatan dalam file function.json:

{
    "type": "cosmosDBTrigger",
    "name": "documents",
    "direction": "in",
    "leaseContainerName": "leases",
    "connection": "<connection-app-setting>",
    "databaseName": "Tasks",
    "containerName": "Items",
    "createLeaseContainerIfNotExists": true
}

Berikut kode skrip C#:

    using System;
    using System.Collections.Generic;
    using Microsoft.Extensions.Logging;

    // Customize the model with your own desired properties
    public class ToDoItem
    {
        public string id { get; set; }
        public string Description { get; set; }
    }

    public static void Run(IReadOnlyList<ToDoItem> documents, ILogger log)
    {
      log.LogInformation("Documents modified " + documents.Count);
      log.LogInformation("First document Id " + documents[0].id);
    }

Input Azure Cosmos DB v2

Bagian ini menguraikan dukungan hanya untuk ekstensi versi 4.x+.

Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke cosmosDB.
arah Harus diatur ke in.
nama Nama variabel yang digunakan dalam kode fungsi yang mewakili daftar dokumen dengan perubahan.
koneksi Nama pengaturan aplikasi atau koleksi aplikasi yang menentukan cara tersambung ke akun Azure Cosmos DB yang sedang dipantau. Untuk informasi selengkapnya, lihat Sambungan.
databaseName Nama database Azure Cosmos DB dengan koleksi sedang dalam pemantauan.
containerName Nama kontainer yang sedang dipantau.
partitionKey Menentukan nilai kunci partisi untuk pencarian. Mungkin termasuk parameter pengikatan. Diperlukan bagi pencarian dalam koleksi yang dipartisi.
id ID dokumen yang akan diambil. Properti ini mendukung ekspresi pengikatan. Jangan atur properti id dan sqlQuery. Jika Anda tidak menyetel salah satu koleksi, seluruh koleksi akan diambil.
sqlQuery Kueri SQL Azure Cosmos DB digunakan untuk mengambil beberapa dokumen. Properti mendukung pengikatan runtime, seperti dalam contoh ini: SELECT * FROM c where c.departmentId = {departmentId}. Jangan atur properti id dan sqlQuery. Jika Anda tidak menyetel salah satu koleksi, seluruh koleksi akan diambil.
preferredLocations (Opsional) Menentukan lokasi (wilayah) pilihan untuk akun database yang direplikasi geografis di layanan Azure Cosmos DB. Nilai harus dipisahkan koma. Contohnya, East US,South Central US,North Europe.

Bagian ini berisi contoh-contoh berikut:

Contoh pemicu HTTP mengacu pada tipe sederhana ToDoItem:

namespace CosmosDBSamplesV2
{
    public class ToDoItem
    {
        public string Id { get; set; }
        public string Description { get; set; }
    }
}

Pemicu antrean, cari ID dari string

Contoh berikut menunjukkan pengikatan input Azure Cosmos DB dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini membaca satu dokumen dan memperbarui nilai teks dokumen.

Berikut data pengikatan dalam file function.json:

{
    "name": "inputDocument",
    "type": "cosmosDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "id" : "{queueTrigger}",
    "partitionKey": "{partition key value}",
    "connectionStringSetting": "MyAccount_COSMOSDB",
    "direction": "in"
}

Berikut kode skrip C#:

    using System;

    // Change input document contents using Azure Cosmos DB input binding
    public static void Run(string myQueueItem, dynamic inputDocument)
    {
      inputDocument.text = "This has changed.";
    }

Pemicu antrean, dapatkan beberapa dokumen, menggunakan SqlQuery

Contoh berikut menunjukkan pengikatan input Azure Cosmos DB dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini mengambil beberapa dokumen yang ditentukan oleh kueri SQL, menggunakan pemicu antrean untuk menyesuaikan parameter kueri.

Pemicu antrean menyediakan parameter departmentId. Pesan antrean { "departmentId" : "Finance" } akan mengembalikan semua catatan untuk departemen keuangan.

Berikut data pengikatan dalam file function.json:

{
    "name": "documents",
    "type": "cosmosDB",
    "direction": "in",
    "databaseName": "MyDb",
    "collectionName": "MyCollection",
    "sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
    "connectionStringSetting": "CosmosDBConnection"
}

Berikut kode skrip C#:

    public static void Run(QueuePayload myQueueItem, IEnumerable<dynamic> documents)
    {
        foreach (var doc in documents)
        {
            // operate on each document
        }
    }

    public class QueuePayload
    {
        public string departmentId { get; set; }
    }

Pemicu HTTP, cari ID dari string kueri

Contoh berikut menunjukkan fungsi skrip C# yang mengambil satu dokumen. Fungsi ini dipicu oleh permintaan HTTP yang menggunakan string kueri untuk menentukan ID dan nilai kunci partisi untuk pencarian. ID dan nilai kunci partisi tersebut digunakan untuk mengambil ToDoItem dokumen dari database dan kumpulan yang ditentukan.

Berikut adalah file function.json:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "cosmosDB",
      "name": "toDoItem",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connectionStringSetting": "CosmosDBConnection",
      "direction": "in",
      "Id": "{Query.id}",
      "PartitionKey" : "{Query.partitionKeyValue}"
    }
  ],
  "disabled": false
}

Berikut kode skrip C#:

using System.Net;
using Microsoft.Extensions.Logging;

public static HttpResponseMessage Run(HttpRequestMessage req, ToDoItem toDoItem, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    if (toDoItem == null)
    {
         log.LogInformation($"ToDo item not found");
    }
    else
    {
        log.LogInformation($"Found ToDo item, Description={toDoItem.Description}");
    }
    return req.CreateResponse(HttpStatusCode.OK);
}

Pemicu HTTP, cari ID dari data rute

Contoh berikut menunjukkan fungsi skrip C# yang mengambil satu dokumen. Fungsi ini dipicu oleh permintaan HTTP yang menggunakan data rute untuk menentukan ID dan nilai kunci partisi untuk pencarian. ID dan nilai kunci partisi tersebut digunakan untuk mengambil ToDoItem dokumen dari database dan kumpulan yang ditentukan.

Berikut adalah file function.json:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ],
      "route":"todoitems/{partitionKeyValue}/{id}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "cosmosDB",
      "name": "toDoItem",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connectionStringSetting": "CosmosDBConnection",
      "direction": "in",
      "id": "{id}",
      "partitionKey": "{partitionKeyValue}"
    }
  ],
  "disabled": false
}

Berikut kode skrip C#:

using System.Net;
using Microsoft.Extensions.Logging;

public static HttpResponseMessage Run(HttpRequestMessage req, ToDoItem toDoItem, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    if (toDoItem == null)
    {
         log.LogInformation($"ToDo item not found");
    }
    else
    {
        log.LogInformation($"Found ToDo item, Description={toDoItem.Description}");
    }
    return req.CreateResponse(HttpStatusCode.OK);
}

Pemicu HTTP, dapatkan beberapa dokumen, menggunakan SqlQuery

Contoh berikut menunjukkan fungsi skrip C# yang mengambil daftar dokumen. Fungsi ini dipicu oleh permintaan HTTP. Kueri ditentukan dalam properti atribut SqlQuery.

Berikut adalah file function.json:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "cosmosDB",
      "name": "toDoItems",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connectionStringSetting": "CosmosDBConnection",
      "direction": "in",
      "sqlQuery": "SELECT top 2 * FROM c order by c._ts desc"
    }
  ],
  "disabled": false
}

Berikut kode skrip C#:

using System.Net;
using Microsoft.Extensions.Logging;

public static HttpResponseMessage Run(HttpRequestMessage req, IEnumerable<ToDoItem> toDoItems, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    foreach (ToDoItem toDoItem in toDoItems)
    {
        log.LogInformation(toDoItem.Description);
    }
    return req.CreateResponse(HttpStatusCode.OK);
}

Pemicu HTTP, dapatkan beberapa dokumen, menggunakan DocumentClient

Contoh berikut menunjukkan fungsi skrip C# yang mengambil daftar dokumen. Fungsi ini dipicu oleh permintaan HTTP. Kode ini menggunakan instans DocumentClient yang disediakan oleh pengikatan Azure Cosmos DB untuk membaca daftar dokumen. Instans DocumentClient juga dapat digunakan untuk operasi tulis.

Berikut adalah file function.json:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "cosmosDB",
      "name": "client",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connectionStringSetting": "CosmosDBConnection",
      "direction": "inout"
    }
  ],
  "disabled": false
}

Berikut kode skrip C#:

#r "Microsoft.Azure.Documents.Client"

using System.Net;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
using Microsoft.Extensions.Logging;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, DocumentClient client, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    Uri collectionUri = UriFactory.CreateDocumentCollectionUri("ToDoItems", "Items");
    string searchterm = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "searchterm", true) == 0)
        .Value;

    if (searchterm == null)
    {
        return req.CreateResponse(HttpStatusCode.NotFound);
    }

    log.LogInformation($"Searching for word: {searchterm} using Uri: {collectionUri.ToString()}");
    IDocumentQuery<ToDoItem> query = client.CreateDocumentQuery<ToDoItem>(collectionUri)
        .Where(p => p.Description.Contains(searchterm))
        .AsDocumentQuery();

    while (query.HasMoreResults)
    {
        foreach (ToDoItem result in await query.ExecuteNextAsync())
        {
            log.LogInformation(result.Description);
        }
    }
    return req.CreateResponse(HttpStatusCode.OK);
}

Output Azure Cosmos DB v2

Bagian ini menguraikan dukungan hanya untuk ekstensi versi 4.x+.

Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.

Properti function.json Deskripsi
koneksi Nama pengaturan aplikasi atau koleksi aplikasi yang menentukan cara terhubung ke akun Azure Cosmos DB yang sedang dipantau. Untuk informasi selengkapnya, lihat Sambungan.
databaseName Nama database Azure Cosmos DB dengan koleksi sedang dalam pemantauan.
containerName Nama kontainer yang sedang dipantau.
createIfNotExists Nilai boolean untuk menunjukkan apakah kontainer dibuat saat tidak ada. Default-nya false karena kontainer baru dibuat dengan throughput yang dipesan, yang memiliki implikasi biaya. Untuk informasi lebih lanjut, lihat halaman harga.
partitionKey Jika createIfNotExists-nya true, nilai tersebut menetapkan jalur kunci partisi untuk kontainer yang dibuat. Mungkin termasuk parameter pengikatan.
containerThroughput Jika createIfNotExists-nya true, nilai tersebut menetapkan throughput kontainer yang dibuat.
preferredLocations (Opsional) Menentukan lokasi (wilayah) pilihan untuk akun database yang direplikasi geografis di layanan Azure Cosmos DB. Nilai harus dipisahkan koma. Contohnya, East US,South Central US,North Europe.

Bagian ini berisi contoh-contoh berikut:

Pemicu antrean, tulis satu dokumen

Contoh berikut menunjukkan pengikatan output Azure Cosmos DB dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini menggunakan pengikatan input antrean untuk antrean yang menerima JSON dalam format berikut:

{
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Fungsi ini membuat dokumen Azure Cosmos DB dalam format berikut untuk setiap baris:

{
    "id": "John Henry-123456",
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Berikut data pengikatan dalam file function.json:

{
    "name": "employeeDocument",
    "type": "cosmosDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "createIfNotExists": true,
    "connectionStringSetting": "MyAccount_COSMOSDB",
    "direction": "out"
}

Berikut kode skrip C#:

    #r "Newtonsoft.Json"

    using Microsoft.Azure.WebJobs.Host;
    using Newtonsoft.Json.Linq;
    using Microsoft.Extensions.Logging;

    public static void Run(string myQueueItem, out object employeeDocument, ILogger log)
    {
      log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");

      dynamic employee = JObject.Parse(myQueueItem);

      employeeDocument = new {
        id = employee.name + "-" + employee.employeeId,
        name = employee.name,
        employeeId = employee.employeeId,
        address = employee.address
      };
    }

Pemicu antrean, tulis dokumen menggunakan IAsyncCollector

Untuk membuat beberapa dokumen, Anda dapat melakukan pengikatan ke ICollector<T> atau IAsyncCollector<T>, dengan T adalah salah satu jenis yang didukung.

Contoh ini mengacu pada jenis ToDoItem sederhana:

namespace CosmosDBSamplesV2
{
    public class ToDoItem
    {
        public string id { get; set; }
        public string Description { get; set; }
    }
}

Berikut adalah file function.json:

{
  "bindings": [
    {
      "name": "toDoItemsIn",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "todoqueueforwritemulti",
      "connectionStringSetting": "AzureWebJobsStorage"
    },
    {
      "type": "cosmosDB",
      "name": "toDoItemsOut",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connectionStringSetting": "CosmosDBConnection",
      "direction": "out"
    }
  ],
  "disabled": false
}

Berikut kode skrip C#:

using System;
using Microsoft.Extensions.Logging;

public static async Task Run(ToDoItem[] toDoItemsIn, IAsyncCollector<ToDoItem> toDoItemsOut, ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed {toDoItemsIn?.Length} items");

    foreach (ToDoItem toDoItem in toDoItemsIn)
    {
        log.LogInformation($"Description={toDoItem.Description}");
        await toDoItemsOut.AddAsync(toDoItem);
    }
}

Pemicu Azure Cosmos DB v1

Contoh berikut menunjukkan pengikatan pemicu Azure Cosmos DB dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini menulis pesan log saat rekaman Azure Cosmos DB dimodifikasi.

Berikut data pengikatan dalam file function.json:

{
    "type": "cosmosDBTrigger",
    "name": "documents",
    "direction": "in",
    "leaseCollectionName": "leases",
    "connectionStringSetting": "<connection-app-setting>",
    "databaseName": "Tasks",
    "collectionName": "Items",
    "createLeaseCollectionIfNotExists": true
}

Berikut kode skrip C#:

    #r "Microsoft.Azure.Documents.Client"
    
    using System;
    using Microsoft.Azure.Documents;
    using System.Collections.Generic;
    

    public static void Run(IReadOnlyList<Document> documents, TraceWriter log)
    {
        log.Info("Documents modified " + documents.Count);
        log.Info("First document Id " + documents[0].Id);
    }

Input Azure Cosmos DB v1

Bagian ini berisi contoh-contoh berikut:

Contoh pemicu HTTP mengacu pada tipe sederhana ToDoItem:

namespace CosmosDBSamplesV1
{
    public class ToDoItem
    {
        public string Id { get; set; }
        public string Description { get; set; }
    }
}

Pemicu antrean, cari ID dari string

Contoh berikut menunjukkan pengikatan input Azure Cosmos DB di file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini membaca satu dokumen dan memperbarui nilai teks dokumen.

Berikut data pengikatan dalam file function.json:

{
    "name": "inputDocument",
    "type": "documentDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "id" : "{queueTrigger}",
    "partitionKey": "{partition key value}",
    "connection": "MyAccount_COSMOSDB",
    "direction": "in"
}

Berikut kode skrip C#:

    using System;

    // Change input document contents using Azure Cosmos DB input binding
    public static void Run(string myQueueItem, dynamic inputDocument)
    {
        inputDocument.text = "This has changed.";
    }

Pemicu antrean, dapatkan beberapa dokumen, menggunakan SqlQuery

Contoh berikut menunjukkan pengikatan input Azure Cosmos DB di file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini mengambil beberapa dokumen yang ditentukan oleh kueri SQL, menggunakan pemicu antrean untuk menyesuaikan parameter kueri.

Pemicu antrean menyediakan parameter departmentId. Pesan antrean { "departmentId" : "Finance" } akan mengembalikan semua catatan untuk departemen keuangan.

Berikut data pengikatan dalam file function.json:

{
    "name": "documents",
    "type": "documentdb",
    "direction": "in",
    "databaseName": "MyDb",
    "collectionName": "MyCollection",
    "sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
    "connection": "CosmosDBConnection"
}

Berikut kode skrip C#:

    public static void Run(QueuePayload myQueueItem, IEnumerable<dynamic> documents)
    {
        foreach (var doc in documents)
        {
            // operate on each document
        }
    }

    public class QueuePayload
    {
        public string departmentId { get; set; }
    }

Pemicu HTTP, cari ID dari string kueri

Contoh berikut menunjukkan fungsi skrip C# yang mengambil satu dokumen. Fungsi ini dipicu oleh permintaan HTTP yang menggunakan sebuah string kueri untuk menentukan ID yang akan dicari. ID tersebut digunakan untuk mengambil dokumen ToDoItem dari database dan kumpulan yang ditentukan.

Berikut adalah file function.json:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "documentDB",
      "name": "toDoItem",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connection": "CosmosDBConnection",
      "direction": "in",
      "Id": "{Query.id}"
    }
  ],
  "disabled": true
}

Berikut kode skrip C#:

using System.Net;

public static HttpResponseMessage Run(HttpRequestMessage req, ToDoItem toDoItem, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");

    if (toDoItem == null)
    {
        log.Info($"ToDo item not found");
    }
    else
    {
        log.Info($"Found ToDo item, Description={toDoItem.Description}");
    }
    return req.CreateResponse(HttpStatusCode.OK);
}

Pemicu HTTP, cari ID dari data rute

Contoh berikut menunjukkan fungsi skrip C# yang mengambil satu dokumen. Fungsi ini dipicu oleh permintaan HTTP yang menggunakan data rute untuk menentukan ID untuk pencarian. ID tersebut digunakan untuk mengambil dokumen ToDoItem dari database dan kumpulan yang ditentukan.

Berikut adalah file function.json:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ],
      "route":"todoitems/{id}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "documentDB",
      "name": "toDoItem",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connection": "CosmosDBConnection",
      "direction": "in",
      "Id": "{id}"
    }
  ],
  "disabled": false
}

Berikut kode skrip C#:

using System.Net;

public static HttpResponseMessage Run(HttpRequestMessage req, ToDoItem toDoItem, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");

    if (toDoItem == null)
    {
        log.Info($"ToDo item not found");
    }
    else
    {
        log.Info($"Found ToDo item, Description={toDoItem.Description}");
    }
    return req.CreateResponse(HttpStatusCode.OK);
}

Pemicu HTTP, dapatkan beberapa dokumen, menggunakan SqlQuery

Contoh berikut menunjukkan fungsi skrip C# yang mengambil daftar dokumen. Fungsi ini dipicu oleh permintaan HTTP. Kueri ditentukan dalam properti atribut SqlQuery.

Berikut adalah file function.json:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "documentDB",
      "name": "toDoItems",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connection": "CosmosDBConnection",
      "direction": "in",
      "sqlQuery": "SELECT top 2 * FROM c order by c._ts desc"
    }
  ],
  "disabled": false
}

Berikut kode skrip C#:

using System.Net;

public static HttpResponseMessage Run(HttpRequestMessage req, IEnumerable<ToDoItem> toDoItems, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");

    foreach (ToDoItem toDoItem in toDoItems)
    {
        log.Info(toDoItem.Description);
    }
    return req.CreateResponse(HttpStatusCode.OK);
}

Pemicu HTTP, dapatkan beberapa dokumen, menggunakan DocumentClient

Contoh berikut menunjukkan fungsi skrip C# yang mengambil daftar dokumen. Fungsi ini dipicu oleh permintaan HTTP. Kode ini menggunakan instans DocumentClient yang disediakan oleh pengikatan Azure Cosmos DB untuk membaca daftar dokumen. Instans DocumentClient juga dapat digunakan untuk operasi tulis.

Berikut adalah file function.json:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "documentDB",
      "name": "client",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connection": "CosmosDBConnection",
      "direction": "inout"
    }
  ],
  "disabled": false
}

Berikut kode skrip C#:

#r "Microsoft.Azure.Documents.Client"

using System.Net;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, DocumentClient client, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");

    Uri collectionUri = UriFactory.CreateDocumentCollectionUri("ToDoItems", "Items");
    string searchterm = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "searchterm", true) == 0)
        .Value;

    if (searchterm == null)
    {
        return req.CreateResponse(HttpStatusCode.NotFound);
    }

    log.Info($"Searching for word: {searchterm} using Uri: {collectionUri.ToString()}");
    IDocumentQuery<ToDoItem> query = client.CreateDocumentQuery<ToDoItem>(collectionUri)
        .Where(p => p.Description.Contains(searchterm))
        .AsDocumentQuery();

    while (query.HasMoreResults)
    {
        foreach (ToDoItem result in await query.ExecuteNextAsync())
        {
            log.Info(result.Description);
        }
    }
    return req.CreateResponse(HttpStatusCode.OK);
}

Output Azure Cosmos DB v1

Bagian ini berisi contoh-contoh berikut:

  • Pemicu antrean, tulis satu dokumen
  • Pemicu antrean, tulis dokumen menggunakan IAsyncCollector

Pemicu antrean, tulis satu dokumen

Contoh berikut menunjukkan pengikatan output Azure Cosmos DB dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini menggunakan pengikatan input antrean untuk antrean yang menerima JSON dalam format berikut:

{
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Fungsi ini membuat dokumen Azure Cosmos DB dalam format berikut untuk setiap baris:

{
    "id": "John Henry-123456",
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Berikut data pengikatan dalam file function.json:

{
    "name": "employeeDocument",
    "type": "documentDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "createIfNotExists": true,
    "connection": "MyAccount_COSMOSDB",
    "direction": "out"
}

Berikut kode skrip C#:

    #r "Newtonsoft.Json"

    using Microsoft.Azure.WebJobs.Host;
    using Newtonsoft.Json.Linq;

    public static void Run(string myQueueItem, out object employeeDocument, TraceWriter log)
    {
        log.Info($"C# Queue trigger function processed: {myQueueItem}");

        dynamic employee = JObject.Parse(myQueueItem);

        employeeDocument = new {
            id = employee.name + "-" + employee.employeeId,
            name = employee.name,
            employeeId = employee.employeeId,
            address = employee.address
        };
    }

Pemicu antrean, tulis dokumen menggunakan IAsyncCollector

Untuk membuat beberapa dokumen, Anda dapat melakukan pengikatan ke ICollector<T> atau IAsyncCollector<T>, dengan T adalah salah satu jenis yang didukung.

Contoh ini mengacu pada jenis ToDoItem sederhana:

namespace CosmosDBSamplesV1
{
    public class ToDoItem
    {
        public string Id { get; set; }
        public string Description { get; set; }
    }
}

Berikut adalah file function.json:

{
  "bindings": [
    {
      "name": "toDoItemsIn",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "todoqueueforwritemulti",
      "connection": "AzureWebJobsStorage"
    },
    {
      "type": "documentDB",
      "name": "toDoItemsOut",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connection": "CosmosDBConnection",
      "direction": "out"
    }
  ],
  "disabled": false
}

Berikut kode skrip C#:

using System;

public static async Task Run(ToDoItem[] toDoItemsIn, IAsyncCollector<ToDoItem> toDoItemsOut, TraceWriter log)
{
    log.Info($"C# Queue trigger function processed {toDoItemsIn?.Length} items");

    foreach (ToDoItem toDoItem in toDoItemsIn)
    {
        log.Info($"Description={toDoItem.Description}");
        await toDoItemsOut.AddAsync(toDoItem);
    }
}

Pemicu Azure SQL

Sampel lainnya untuk pemicu Azure SQL tersedia di repositori GitHub.

Contoh mengacu pada ToDoItem kelas dan tabel database terkait:

namespace AzureSQL.ToDo
{
    public class ToDoItem
    {
        public Guid Id { get; set; }
        public int? order { get; set; }
        public string title { get; set; }
        public string url { get; set; }
        public bool? completed { get; set; }
    }
}
CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

Pelacakan perubahan diaktifkan pada database dan pada tabel:

ALTER DATABASE [SampleDatabase]
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);

ALTER TABLE [dbo].[ToDo]
ENABLE CHANGE_TRACKING;

Pemicu SQL mengikat ke IReadOnlyList<SqlChange<T>>, daftar SqlChange objek masing-masing dengan dua properti:

  • Item: item yang diubah. Jenis item harus mengikuti skema tabel seperti yang terlihat di ToDoItem kelas .
  • Operasi: nilai dari SqlChangeOperation enum. Nilai yang mungkin adalah Insert, Update, dan Delete.

Contoh berikut menunjukkan pemicu SQL dalam file function.json dan fungsi skrip C# yang dipanggil ketika ada perubahan pada ToDo tabel:

Berikut ini adalah mengikat data dalam file function.json:

{
    "name": "todoChanges",
    "type": "sqlTrigger",
    "direction": "in",
    "tableName": "dbo.ToDo",
    "connectionStringSetting": "SqlConnectionString"
}

Berikut ini adalah fungsi skrip C#:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static void Run(IReadOnlyList<SqlChange<ToDoItem>> todoChanges, ILogger log)
{
    log.LogInformation($"C# SQL trigger function processed a request.");

    foreach (SqlChange<ToDoItem> change in todoChanges)
    {
        ToDoItem toDoItem = change.Item;
        log.LogInformation($"Change operation: {change.Operation}");
        log.LogInformation($"Id: {toDoItem.Id}, Title: {toDoItem.title}, Url: {toDoItem.url}, Completed: {toDoItem.completed}");
    }
}

Input Azure SQL

Contoh lainnya untuk pengikatan input Azure SQL tersedia di repositori GitHub.

Bagian ini berisi contoh-contoh berikut:

Contoh mengacu pada ToDoItem kelas dan tabel database yang sesuai:

namespace AzureSQL.ToDo
{
    public class ToDoItem
    {
        public Guid Id { get; set; }
        public int? order { get; set; }
        public string title { get; set; }
        public string url { get; set; }
        public bool? completed { get; set; }
    }
}
CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

Pemicu HTTP, dapatkan baris berdasarkan ID dari string kueri

Contoh berikut menunjukkan pengikatan input Azure SQL dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini dipicu oleh permintaan HTTP yang menggunakan sebuah string kueri untuk menentukan ID. ID tersebut digunakan untuk mengambil ToDoItem catatan dengan kueri yang ditentukan.

Catatan

Parameter string kueri HTTP peka huruf besar/kecil.

Berikut data pengikatan dalam file function.json:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "get"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItem",
    "type": "sql",
    "direction": "in",
    "commandText": "select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id",
    "commandType": "Text",
    "parameters": "@Id = {Query.id}",
    "connectionStringSetting": "SqlConnectionString"
}

Berikut kode skrip C#:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Collections.Generic;

public static IActionResult Run(HttpRequest req, ILogger log, IEnumerable<ToDoItem> todoItem)
{
    return new OkObjectResult(todoItem);
}

Pemicu HTTP, hapus baris

Contoh berikut menunjukkan pengikatan input Azure SQL dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan untuk menjalankan prosedur tersimpan dengan input dari parameter kueri permintaan HTTP. Dalam contoh ini, prosedur tersimpan menghapus satu rekaman atau semua rekaman tergantung pada nilai parameter.

Prosedur tersimpan dbo.DeleteToDo harus dibuat di database SQL.

CREATE PROCEDURE [dbo].[DeleteToDo]
    @Id NVARCHAR(100)
AS
    DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
    IF @UId IS NOT NULL AND @Id != ''
    BEGIN
        DELETE FROM dbo.ToDo WHERE Id = @UID
    END
    ELSE
    BEGIN
        DELETE FROM dbo.ToDo WHERE @ID = ''
    END

    SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO

Berikut data pengikatan dalam file function.json:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "get"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "in",
    "commandText": "DeleteToDo",
    "commandType": "StoredProcedure",
    "parameters": "@Id = {Query.id}",
    "connectionStringSetting": "SqlConnectionString"
}
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;

namespace AzureSQL.ToDo
{
    public static class DeleteToDo
    {
        // delete all items or a specific item from querystring
        // returns remaining items
        // uses input binding with a stored procedure DeleteToDo to delete items and return remaining items
        [FunctionName("DeleteToDo")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "DeleteFunction")] HttpRequest req,
            ILogger log,
            [Sql(commandText: "DeleteToDo", commandType: System.Data.CommandType.StoredProcedure, 
                parameters: "@Id={Query.id}", connectionStringSetting: "SqlConnectionString")] 
                IEnumerable<ToDoItem> toDoItems)
        {
            return new OkObjectResult(toDoItems);
        }
    }
}

Berikut kode skrip C#:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Collections.Generic;

public static IActionResult Run(HttpRequest req, ILogger log, IEnumerable<ToDoItem> todoItems)
{
    return new OkObjectResult(todoItems);
}

Output Azure SQL

Sampel lainnya untuk pengikatan output Azure SQL tersedia di repositori GitHub.

Bagian ini berisi contoh-contoh berikut:

Contoh mengacu pada ToDoItem kelas dan tabel database yang sesuai:

namespace AzureSQL.ToDo
{
    public class ToDoItem
    {
        public Guid Id { get; set; }
        public int? order { get; set; }
        public string title { get; set; }
        public string url { get; set; }
        public bool? completed { get; set; }
    }
}
CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

Pemicu HTTP, tulis rekaman ke tabel

Contoh berikut menunjukkan pengikatan output SQL dalam file function.json dan fungsi skrip C# yang menambahkan rekaman ke tabel, menggunakan data yang disediakan dalam permintaan HTTP POST sebagai isi JSON.

Berikut ini adalah mengikat data dalam file function.json:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "post"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItem",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.ToDo",
    "connectionStringSetting": "SqlConnectionString"
}

Berikut ini adalah contoh kode skrip C#:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static IActionResult Run(HttpRequest req, ILogger log, out ToDoItem todoItem)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string requestBody = new StreamReader(req.Body).ReadToEnd();
    todoItem = JsonConvert.DeserializeObject<ToDoItem>(requestBody);

    return new OkObjectResult(todoItem);
}

Pemicu HTTP, tulis ke dua tabel

Contoh berikut menunjukkan pengikatan output SQL dalam file function.json dan fungsi skrip C# yang menambahkan rekaman ke database dalam dua tabel berbeda (dbo.ToDo dan dbo.RequestLog), menggunakan data yang disediakan dalam permintaan HTTP POST sebagai isi JSON dan beberapa pengikatan output.

Tabel kedua, dbo.RequestLog, sesuai dengan definisi berikut:

CREATE TABLE dbo.RequestLog (
    Id int identity(1,1) primary key,
    RequestTimeStamp datetime2 not null,
    ItemCount int not null
)

Berikut ini adalah mengikat data dalam file function.json:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "post"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItem",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.ToDo",
    "connectionStringSetting": "SqlConnectionString"
},
{
    "name": "requestLog",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.RequestLog",
    "connectionStringSetting": "SqlConnectionString"
}

Berikut ini adalah contoh kode skrip C#:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static IActionResult Run(HttpRequest req, ILogger log, out ToDoItem todoItem, out RequestLog requestLog)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string requestBody = new StreamReader(req.Body).ReadToEnd();
    todoItem = JsonConvert.DeserializeObject<ToDoItem>(requestBody);

    requestLog = new RequestLog();
    requestLog.RequestTimeStamp = DateTime.Now;
    requestLog.ItemCount = 1;

    return new OkObjectResult(todoItem);
}

public class RequestLog {
    public DateTime RequestTimeStamp { get; set; }
    public int ItemCount { get; set; }
}

Output RabbitMQ

Contoh berikut menunjukkan pengikatan output RabbitMQ dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini berbunyi dalam pesan dari pemicu HTTP dan mengeluarkannya ke antrian RabbitMQ.

Berikut data pengikatan dalam file function.json:

{
    "bindings": [
        {
            "type": "httpTrigger",
            "direction": "in",
            "authLevel": "function",
            "name": "input",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "rabbitMQ",
            "name": "outputMessage",
            "queueName": "outputQueue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting",
            "direction": "out"
        }
    ]
}

Berikut kode skrip C#:

using System;
using Microsoft.Extensions.Logging;

public static void Run(string input, out string outputMessage, ILogger log)
{
    log.LogInformation(input);
    outputMessage = input;
}

Output SendGrid

Contoh berikut menunjukkan pengikatan output SendGrid dalam file function.json dan fungsi skrip C# yang menggunakan pengikatan.

Berikut data pengikatan dalam file function.json:

{
    "bindings": [
        {
          "type": "queueTrigger",
          "name": "mymsg",
          "queueName": "myqueue",
          "connection": "AzureWebJobsStorage",
          "direction": "in"
        },
        {
          "type": "sendGrid",
          "name": "$return",
          "direction": "out",
          "apiKey": "SendGridAPIKeyAsAppSetting",
          "from": "{FromEmail}",
          "to": "{ToEmail}"
        }
    ]
}

Berikut kode skrip C#:

#r "SendGrid"

using System;
using SendGrid.Helpers.Mail;
using Microsoft.Azure.WebJobs.Host;

public static SendGridMessage Run(Message mymsg, ILogger log)
{
    SendGridMessage message = new SendGridMessage()
    {
        Subject = $"{mymsg.Subject}"
    };
    
    message.AddContent("text/plain", $"{mymsg.Content}");

    return message;
}
public class Message
{
    public string ToEmail { get; set; }
    public string FromEmail { get; set; }
    public string Subject { get; set; }
    public string Content { get; set; }
}

Pemicu SignalR

Berikut contoh data pengikatan di file function.json:

{
    "type": "signalRTrigger",
    "name": "invocation",
    "hubName": "SignalRTest",
    "category": "messages",
    "event": "SendMessage",
    "parameterNames": [
        "message"
    ],
    "direction": "in"
}

Berikut kodenya:

#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using System;
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
using Microsoft.Extensions.Logging;

public static void Run(InvocationContext invocation, string message, ILogger logger)
{
    logger.LogInformation($"Receive {message} from {invocationContext.ConnectionId}.");
}

Input SignalR

Contoh berikut menunjukkan input info koneksi SignalR yang mengikat pada file function.json dan fungsi C# Script yang menggunakan pengikatan untuk mengembalikan informasi koneksi.

Berikut data pengikatan dalam file function.json:

Contoh function.json:

{
    "type": "signalRConnectionInfo",
    "name": "connectionInfo",
    "hubName": "chat",
    "connectionStringSetting": "<name of setting containing SignalR Service connection string>",
    "direction": "in"
}

Berikut kode C# Script:

#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;

public static SignalRConnectionInfo Run(HttpRequest req, SignalRConnectionInfo connectionInfo)
{
    return connectionInfo;
}

Anda dapat mengatur properti userId pengikatan ke nilai dari salah satu header menggunakan ekspresi pengikatan: {headers.x-ms-client-principal-id} atau {headers.x-ms-client-principal-name}.

Contoh function.json:

{
    "type": "signalRConnectionInfo",
    "name": "connectionInfo",
    "hubName": "chat",
    "userId": "{headers.x-ms-client-principal-id}",
    "connectionStringSetting": "<name of setting containing SignalR Service connection string>",
    "direction": "in"
}

Berikut kode C# Script:

#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;

public static SignalRConnectionInfo Run(HttpRequest req, SignalRConnectionInfo connectionInfo)
{
    // connectionInfo contains an access key token with a name identifier
    // claim set to the authenticated user
    return connectionInfo;
}

Output SignalR

Berikut data pengikatan dalam file function.json:

Contoh function.json:

{
  "type": "signalR",
  "name": "signalRMessages",
  "hubName": "<hub_name>",
  "connectionStringSetting": "<name of setting containing SignalR Service connection string>",
  "direction": "out"
}

Berikut kode C# Script:

#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;

public static Task Run(
    object message,
    IAsyncCollector<SignalRMessage> signalRMessages)
{
    return signalRMessages.AddAsync(
        new SignalRMessage
        {
            Target = "newMessage",
            Arguments = new [] { message }
        });
}

Anda hanya dapat mengirim pesan ke koneksi yang telah diautentikasi ke pengguna dengan mengatur ID pengguna dalam pesan SignalR.

Contoh function.json:

{
  "type": "signalR",
  "name": "signalRMessages",
  "hubName": "<hub_name>",
  "connectionStringSetting": "<name of setting containing SignalR Service connection string>",
  "direction": "out"
}

Berikut kode skrip C#:

#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;

public static Task Run(
    object message,
    IAsyncCollector<SignalRMessage> signalRMessages)
{
    return signalRMessages.AddAsync(
        new SignalRMessage
        {
            // the message will only be sent to this user ID
            UserId = "userId1",
            Target = "newMessage",
            Arguments = new [] { message }
        });
}

Anda hanya bisa mengirim pesan ke koneksi yang telah ditambahkan ke grup dengan mengatur nama grup dalam pesan SignalR.

Contoh function.json:

{
  "type": "signalR",
  "name": "signalRMessages",
  "hubName": "<hub_name>",
  "connectionStringSetting": "<name of setting containing SignalR Service connection string>",
  "direction": "out"
}

Berikut kode C# Script:

#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;

public static Task Run(
    object message,
    IAsyncCollector<SignalRMessage> signalRMessages)
{
    return signalRMessages.AddAsync(
        new SignalRMessage
        {
            // the message will be sent to the group with this name
            GroupName = "myGroup",
            Target = "newMessage",
            Arguments = new [] { message }
        });
}

SignalR Service memungkinkan pengguna untuk ditambahkan ke grup. Pesan kemudian dapat dikirim ke grup. Anda dapat menggunakan pengikatan output SignalR untuk mengelola grup.

Contoh berikut menambahkan pengguna ke grup.

Contoh function.json

{
    "type": "signalR",
    "name": "signalRGroupActions",
    "connectionStringSetting": "<name of setting containing SignalR Service connection string>",
    "hubName": "chat",
    "direction": "out"
}

Run.csx

#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;

public static Task Run(
    HttpRequest req,
    ClaimsPrincipal claimsPrincipal,
    IAsyncCollector<SignalRGroupAction> signalRGroupActions)
{
    var userIdClaim = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier);
    return signalRGroupActions.AddAsync(
        new SignalRGroupAction
        {
            UserId = userIdClaim.Value,
            GroupName = "myGroup",
            Action = GroupAction.Add
        });
}

Contoh berikut ini akan menghapus pengguna dari grup.

Contoh function.json

{
    "type": "signalR",
    "name": "signalRGroupActions",
    "connectionStringSetting": "<name of setting containing SignalR Service connection string>",
    "hubName": "chat",
    "direction": "out"
}

Run.csx

#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;

public static Task Run(
    HttpRequest req,
    ClaimsPrincipal claimsPrincipal,
    IAsyncCollector<SignalRGroupAction> signalRGroupActions)
{
    var userIdClaim = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier);
    return signalRGroupActions.AddAsync(
        new SignalRGroupAction
        {
            UserId = userIdClaim.Value,
            GroupName = "myGroup",
            Action = GroupAction.Remove
        });
}

Output Twilio

Contoh berikut menunjukkan pengikatan output Twilio di file function.json dan fungsi skrip C# yang menggunakan pengikatan. Fungsi ini menggunakan parameter out untuk mengirim pesan teks.

Berikut data pengikatan dalam file function.json:

Contoh function.json:

{
  "type": "twilioSms",
  "name": "message",
  "accountSidSetting": "TwilioAccountSid",
  "authTokenSetting": "TwilioAuthToken",
  "from": "+1425XXXXXXX",
  "direction": "out",
  "body": "Azure Functions Testing"
}

Berikut kode skrip C#-nya:

#r "Newtonsoft.Json"
#r "Twilio"
#r "Microsoft.Azure.WebJobs.Extensions.Twilio"

using System;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.Azure.WebJobs.Extensions.Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

public static void Run(string myQueueItem, out CreateMessageOptions message,  ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");

    // In this example the queue item is a JSON string representing an order that contains the name of a
    // customer and a mobile number to send text updates to.
    dynamic order = JsonConvert.DeserializeObject(myQueueItem);
    string msg = "Hello " + order.name + ", thank you for your order.";

    // You must initialize the CreateMessageOptions variable with the "To" phone number.
    message = new CreateMessageOptions(new PhoneNumber("+1704XXXXXXX"));

    // A dynamic message can be set instead of the body in the output binding. In this example, we use
    // the order information to personalize a text message.
    message.Body = msg;
}

Anda tidak dapat menggunakan parameter dalam kode asinkron. Berikut contoh kode skrip C# asinkron:

#r "Newtonsoft.Json"
#r "Twilio"
#r "Microsoft.Azure.WebJobs.Extensions.Twilio"

using System;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.Azure.WebJobs.Extensions.Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

public static async Task Run(string myQueueItem, IAsyncCollector<CreateMessageOptions> message,  ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");

    // In this example the queue item is a JSON string representing an order that contains the name of a
    // customer and a mobile number to send text updates to.
    dynamic order = JsonConvert.DeserializeObject(myQueueItem);
    string msg = "Hello " + order.name + ", thank you for your order.";

    // You must initialize the CreateMessageOptions variable with the "To" phone number.
    CreateMessageOptions smsText = new CreateMessageOptions(new PhoneNumber("+1704XXXXXXX"));

    // A dynamic message can be set instead of the body in the output binding. In this example, we use
    // the order information to personalize a text message.
    smsText.Body = msg;

    await message.AddAsync(smsText);
}

Pemicu pemanasan

Contoh berikut menunjukkan pemicu pemanasan dalam file function.json dan fungsi skrip C# yang berjalan pada setiap instans baru saat ditambahkan ke aplikasi Anda.

Tidak didukung untuk versi 1.x runtime Functions.

Berikut adalah file function.json:

{
    "bindings": [
        {
            "type": "warmupTrigger",
            "direction": "in",
            "name": "warmupContext"
        }
    ]
}
public static void Run(WarmupContext warmupContext, ILogger log)
{
    log.LogInformation("Function App instance is warm.");  
}

Langkah berikutnya