Azure Functions C# 스크립트(.csx) 개발자 참조Azure Functions C# script (.csx) developer reference

이 문서는 C# 스크립트( .csx)를 사용하여 Azure Functions를 개발하는 방법을 소개합니다.This article is an introduction to developing Azure Functions by using C# script (.csx).

Azure Functions는 C# 및 C# 스크립트 프로그래밍 언어를 지원합니다.Azure Functions supports C# and C# script programming languages. Visual Studio 클래스 라이브러리 프로젝트에서 C#을 사용하기 위한 지침을 찾고 있는 경우 C# 개발자 참조를 참조하세요.If you're looking for guidance on using C# in a Visual Studio class library project, see C# developer reference.

이 문서에서는 Azure Functions 개발자 가이드를 이미 읽었다고 가정합니다.This article assumes that you've already read the Azure Functions developers guide.

.csx의 작동 원리How .csx works

Azure Functions에 대한 C# 스크립트 환경은 Azure WebJobs SDK를 기준으로 합니다.The C# script experience for Azure Functions is based on the Azure WebJobs SDK. 데이터는 메서드 인수를 통해 C# 함수로 흐릅니다.Data flows into your C# function via method arguments. 인수 이름은 function.json 파일에 지정되며 함수 로거 및 취소 토큰 같은 항목에 액세스하기 위해 미리 정의된 이름이 있습니다.Argument names are specified in a function.json file, and there are predefined names for accessing things like the function logger and cancellation tokens.

.csx 형식을 사용하면 "상용구"를 덜 작성하고 C# 함수를 작성하는 데 집중할 수 있습니다.The .csx format allows you to write less "boilerplate" and focus on writing just a C# function. 네임스페이스 및 클래스의 모든 항목을 래핑하는 대신 Run 메서드만 정의합니다.Instead of wrapping everything in a namespace and class, just define a Run method. 일반적으로 파일의 시작 부분에 모든 어셈블리 참조 및 네임스페이스를 포함합니다.Include any assembly references and namespaces at the beginning of the file as usual.

함수 앱의 .csx 파일은 인스턴스가 초기화될 때 컴파일됩니다.A function app's .csx files are compiled when an instance is initialized. 이 컴파일 단계는 콜드 시작 등의 방식이 C# 클래스 라이브러리에 비해 C# 스크립트 함수를 실행하는 데 더 오래 걸릴 수 있음을 의미합니다.This compilation step means things like cold start may take longer for C# script functions compared to C# class libraries. 이 컴파일 단계는 C# 스크립트 함수가 C# 클래스 라이브러리와 달리 Azure Portal에서 편집 가능한 이유를 나타내기도 합니다.This compilation step is also why C# script functions are editable in the Azure portal, while C# class libraries are not.

폴더 구조Folder structure

C# 스크립트 프로젝트에 필요한 폴더 구조는 다음과 같습니다.The folder structure for a C# script project looks like the following:

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

함수 앱을 구성하는 데 사용할 수 있는 공유 host.json 파일이 있습니다.There's a shared host.json file that can be used to configure the function app. 각 함수에는 자체 코드 파일(.csx)과 바인딩 구성 파일(function.json)이 있습니다.Each function has its own code file (.csx) and binding configuration file (function.json).

Functions 런타임의 버전 2.x에 필요한 바인딩 확장은 extensions.csproj 파일에 정의되어 있고 실제 라이브러리 파일은 bin 폴더에 있습니다.The binding extensions required in version 2.x of the Functions runtime are defined in the extensions.csproj file, with the actual library files in the bin folder. 로컬에서 개발할 때는 바인딩 확장을 등록해야 합니다.When developing locally, you must register binding extensions. Azure Portal에서 함수를 개발할 때 이 등록이 자동으로 수행됩니다.When developing functions in the Azure portal, this registration is done for you.

인수에 바인딩Binding to arguments

입력 또는 출력 데이터는 function.json 구성 파일의 name 속성을 통해 C# 스크립트 함수 매개 변수에 바인딩됩니다.Input or output data is bound to a C# script function parameter via the name property in the function.json configuration file. 다음 예제에서는 큐 트리거 함수에 대한 function.json 파일 및 run.csx 파일을 보여 줍니다.The following example shows a function.json file and run.csx file for a queue-triggered function. 큐 메시지에서 데이터를 받는 매개 변수 이름은 name 속성의 값이기 때문에 myQueueItem으로 지정됩니다.The parameter that receives data from the queue message is named myQueueItem because that's the value of the name property.

{
    "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}");
}

#r 문은 이 문서 뒷부분에 설명되어 있습니다.The #r statement is explained later in this article.

바인딩에 대해 지원되는 형식Supported types for bindings

각 바인딩에는 자체적인 지원 형식이 있습니다. 예를들 어, Blob 트리거는 문자열 매개 변수, POCO 매개 변수, CloudBlockBlob 매개 변수 또는 지원되는 기타 몇 가지 형식과 함께 사용될 수 있습니다.Each binding has its own supported types; for instance, a blob trigger can be used with a string parameter, a POCO parameter, a CloudBlockBlob parameter, or any of several other supported types. Blob 바인딩에 대한 바인딩 참조 문서에는 Blob 트리거에 대해 지원되는 모든 매개 변수 형식이 나와 있습니다.The binding reference article for blob bindings lists all supported parameter types for blob triggers. 자세한 내용은 트리거 및 바인딩각 바인딩 형식에 대한 바인딩 참조 문서를 참조하세요.For more information, see Triggers and bindings and the binding reference docs for each binding type.

HTTP 또는 WebHook를 사용할 계획인 경우 HttpClient의 부적절한 인스턴스화로 인해 발생할 수 있는 포트 소모를 피하도록 계획합니다.If you plan to use the HTTP or WebHook bindings, plan to avoid port exhaustion that can be caused by improper instantiation of HttpClient. 자세한 내용은 Azure Functions에서 연결을 관리하는 방법을 참조하세요.For more information, see How to manage connections in Azure Functions.

사용자 지정 클래스 참조Referencing custom classes

사용자 지정 POCO(Plain Old CLR Object) 클래스를 사용해야 하는 경우 동일한 파일 내에 클래스 정의를 포함하거나 별도 파일에 추가할 수 있습니다.If you need to use a custom Plain Old CLR Object (POCO) class, you can include the class definition inside the same file or put it in a separate file.

다음 예제에서는 POCO 클래스 정의를 포함하는 run.csx 예를 보여 줍니다.The following example shows a run.csx example that includes a POCO class definition.

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; }
}

POCO 클래스에는 각 속성에 대해 정의된 Getter 및 setter가 있어야 합니다.A POCO class must have a getter and setter defined for each property.

.csx 코드 재사용Reusing .csx code

run.csx 파일에 있는 다른 .csx 파일에 정의된 클래스와 메서드를 사용할 수 있습니다.You can use classes and methods defined in other .csx files in your run.csx file. 이를 위해 run.csx 파일의 #load 지시문을 사용합니다.To do that, use #load directives in your run.csx file. 다음 예제에서는 MyLogger이라는 이름의 로깅 루틴이 myLogger.csx에서 공유되고 #load 지시문을 사용하여 run.csx로 로드됩니다.In the following example, a logging routine named MyLogger is shared in myLogger.csx and loaded into run.csx using the #load directive:

예제 run.csx:Example 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}");
}

예제 mylogger.csx:Example mylogger.csx:

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

공유된 .csx 파일을 사용하는 것은 POCO 개체를 사용하여 함수 간에 전달된 데이터에 강력한 형식을 지정하려는 경우에 일반적인 패턴입니다.Using a shared .csx file is a common pattern when you want to strongly type the data passed between functions by using a POCO object. 다음 간단한 예제에서는 HTTP 트리거 및 큐 트리거는 Order라는 이름의 POCO 개체를 공유하여 주문 데이터를 강력한 형식으로 만듭니다.In the following simplified example, an HTTP trigger and queue trigger share a POCO object named Order to strongly type the order data:

HTTP 트리거를 위한 run.csx 예제:Example run.csx for HTTP trigger:

#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);
    }
}

큐 트리거를 위한 run.csx 예제:Example run.csx for queue trigger:

#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;
}

order.csx 예제:Example 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}";
    }
}

#load 지시문으로 상대 경로를 사용할 수 있습니다.You can use a relative path with the #load directive:

  • #load "mylogger.csx" 는 함수 폴더에 있는 파일을 로드합니다.#load "mylogger.csx" loads a file located in the function folder.
  • #load "loadedfiles\mylogger.csx" 는 함수 폴더의 폴더에 있는 파일을 로드합니다.#load "loadedfiles\mylogger.csx" loads a file located in a folder in the function folder.
  • #load "..\shared\mylogger.csx" 는 함수 폴더와 동일한 수준의 폴더 즉, wwwroot에 있는 파일을 로드합니다.#load "..\shared\mylogger.csx" loads a file located in a folder at the same level as the function folder, that is, directly under wwwroot.

#load 지시문은 .cs 파일이 아닌 .csx 파일에서만 작동합니다.The #load directive works only with .csx files, not with .cs files.

메서드 반환 값에 바인딩Binding to method return value

function.json에서 이름 $return을 사용하여 출력 바인딩에 메서드 반환 값을 사용할 수 있습니다.You can use a method return value for an output binding, by using the name $return in function.json. 예제를 보려면 트리거 및 바인딩을 참조하세요.For examples, see Triggers and bindings.

성공적인 함수 실행이 항상 출력 바인딩으로 전달할 반환 값을 생성하는 경우에만 반환 값을 사용합니다.Use the return value only if a successful function execution always results in a return value to pass to the output binding. 그렇지 않으면 다음 섹션에 나와 있는 것처럼 ICollector 또는 IAsyncCollector를 사용합니다.Otherwise, use ICollector or IAsyncCollector, as shown in the following section.

여러 출력 값 쓰기Writing multiple output values

출력 바인딩에 여러 값을 쓰거나 성공적인 함수 호출이 출력 바인딩에 전달할 값을 생성하지 않는 경우 ICollector 또는 IAsyncCollector 형식을 사용합니다.To write multiple values to an output binding, or if a successful function invocation might not result in anything to pass to the output binding, use the ICollector or IAsyncCollector types. 이러한 형식은 메서드가 완료될 때 출력 바인딩에 기록되는 쓰기 전용 컬렉션입니다.These types are write-only collections that are written to the output binding when the method completes.

이 예제에서는 ICollector를 사용하여 동일한 큐에 여러 큐 메시지를 씁니다.This example writes multiple queue messages into the same queue using ICollector:

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

로깅Logging

C#의 스트리밍 로그에 대한 출력을 기록하려면 ILogger 형식의 인수를 포함합니다.To log output to your streaming logs in C#, include an argument of type ILogger. 이름을 log로 하는 것이 좋습니다.We recommend that you name it log. Azure Functions에서 Console.Write를 사용하지 마세요.Avoid using Console.Write in Azure Functions.

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

참고

TraceWriter 대신 사용할 수 있는 최신 로깅 프레임워크에 대한 내용은 Azure Functions 모니터링 문서에서 C# 함수로 로그 작성을 참조하세요.For information about a newer logging framework that you can use instead of TraceWriter, see Write logs in C# functions in the Monitor Azure Functions article.

AsyncAsync

비동기화 함수를 만들려면 async 키워드를 사용하고 Task 개체를 반환합니다.To make a function asynchronous, use the async keyword and return a Task object.

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

out 매개 변수는 비동기 함수에 사용할 수 없습니다.You can't use out parameters in async functions. 출력 바인딩에는 함수 반환 값 또는 수집기 개체를 대신 사용합니다.For output bindings, use the function return value or a collector object instead.

취소 토큰Cancellation tokens

함수는 함수가 종료될 때 운영 체제가 코드에 알릴 수 있게 해주는 CancellationToken 매개 변수를 사용할 수 있습니다.A function can accept a CancellationToken parameter, which enables the operating system to notify your code when the function is about to be terminated. 이 알림을 통해 함수가 예기치 않게 종료되어 데이터가 일관되지 않은 상태가 되는 것을 방지할 수 있습니다.You can use this notification to make sure the function doesn't terminate unexpectedly in a way that leaves data in an inconsistent state.

다음 예제에서는 임박한 함수 종료를 확인하는 방법을 보여 줍니다.The following example shows how to check for impending function termination.

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);
    }
}

네임스페이스 가져오기Importing namespaces

네임스페이스를 가져와야 하는 경우 using 절과 함께 정상적으로 수행할 수 있습니다.If you need to import namespaces, you can do so as usual, with the using clause.

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

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

다음 네임스페이스를 자동으로 가져오므로 다음은 선택적입니다.The following namespaces are automatically imported and are therefore optional:

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

외부 어셈블리 참조Referencing external assemblies

프레임워크 어셈블리의 경우 #r "AssemblyName" 지시문을 사용하여 참조를 추가합니다.For framework assemblies, add references by using the #r "AssemblyName" directive.

#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)

다음 어셈블리는 Azure Functions 호스팅 환경에 의해 자동으로 추가됩니다.The following assemblies are automatically added by the Azure Functions hosting environment:

  • 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

다음 어셈블리는 단순한 이름(예: #r "AssemblyName")으로 참조될 수 있습니다.The following assemblies may be referenced by simple-name (for example, #r "AssemblyName"):

  • Newtonsoft.Json
  • Microsoft.WindowsAzure.Storage
  • Microsoft.ServiceBus
  • Microsoft.AspNet.WebHooks.Receivers
  • Microsoft.AspNet.WebHooks.Common
  • Microsoft.Azure.NotificationHubs

사용자 지정 어셈블리 참조Referencing custom assemblies

사용자 지정 어셈블리를 참조하려면 공유 어셈블리 또는 프라이빗 어셈블리를 사용합니다.To reference a custom assembly, you can use either a shared assembly or a private assembly:

  • 공유 어셈블리는 함수 앱 내의 모든 함수에서 공유됩니다.Shared assemblies are shared across all functions within a function app. 사용자 지정 어셈블리를 참조하려면 함수 앱 루트 폴더(wwwroot)의 bin 폴더에 해당 어셈블리를 업로드합니다.To reference a custom assembly, upload the assembly to a folder named bin in your function app root folder (wwwroot).

  • 프라이빗 어셈블리는 지정된 함수 컨텍스트의 일부이며 여러 버전의 테스트용 로드를 지원합니다.Private assemblies are part of a given function's context, and support side-loading of different versions. 프라이빗 어셈블리는 함수 디렉터리의 bin 폴더에 업로드해야 합니다.Private assemblies should be uploaded in a bin folder in the function directory. #r "MyAssembly.dll"과 같은 파일 이름을 사용하여 어셈블리를 참조합니다.Reference the assemblies using the file name, such as #r "MyAssembly.dll".

함수 폴더에 파일을 업로드하는 방법에 대한 내용은 패키지 관리에 대한 섹션을 참조하세요.For information on how to upload files to your function folder, see the section on package management.

감시 디렉터리Watched directories

함수 스크립트 파일을 포함하는 디렉터리는 어셈블리 변경 내용이 자동으로 감시됩니다.The directory that contains the function script file is automatically watched for changes to assemblies. 다른 디렉터리의 어셈블리 변경 내용을 감시하려면 host.jsonwatchDirectories 목록에 해당 디렉터리를 추가합니다.To watch for assembly changes in other directories, add them to the watchDirectories list in host.json.

NuGet 패키지 사용Using NuGet packages

2.x C# 함수에서 NuGet 패키지를 사용 하려면 함수 앱의 파일 시스템에 있는 함수의 폴더에 함수 proj 파일을 업로드 합니다.To use NuGet packages in a 2.x C# function, upload a function.proj file to the function's folder in the function app's file system. 다음은 Microsoft.ProjectOxford.Face 버전 1.1.0에 참조를 추가하는 예제 function.proj 파일입니다.Here is an example function.proj file that adds a reference to Microsoft.ProjectOxford.Face version 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>

사용자 지정 NuGet 피드를 사용하려면 함수 앱 루트의 Nuget.Config 파일에서 피드를 지정합니다.To use a custom NuGet feed, specify the feed in a Nuget.Config file in the Function App root. 자세한 내용은 참조 NuGet 동작 구성을 참조하세요.For more information, see Configuring NuGet behavior.

참고

1.x C# 함수에서 NuGet 패키지는 함수 proj 파일 대신 프로젝트. json 파일을 사용 하 여 참조 됩니다.In 1.x C# functions, NuGet packages are referenced with a project.json file instead of a function.proj file.

1.x 함수의 경우 프로젝트. json 파일을 대신 사용 합니다.For 1.x functions, use a project.json file instead. 다음은 project. json 파일의 예입니다.Here is an example project.json file:

{
  "frameworks": {
    "net46":{
      "dependencies": {
        "Microsoft.ProjectOxford.Face": "1.1.0"
      }
    }
   }
}

함수 proj 파일 사용Using a function.proj file

  1. Azure Portal에서 함수를 엽니다.Open the function in the Azure portal. 로그 탭에 패키지 설치 출력이 표시됩니다.The logs tab displays the package installation output.
  2. 함수 proj 파일을 업로드 하려면 Azure Functions 개발자 참조 항목에서 함수 앱 파일을 업데이트 하는 방법 항목에 설명 된 방법 중 하나를 사용 합니다.To upload a function.proj file, use one of the methods described in the How to update function app files in the Azure Functions developer reference topic.
  3. 함수 proj 파일을 업로드 한 후 함수의 스트리밍 로그에 다음 예제와 같은 출력이 표시 됩니다.After the function.proj file is uploaded, you see output like the following example in your function's streaming log:
2018-12-14T22:00:48.658 [Information] Restoring packages.
2018-12-14T22:00:48.681 [Information] Starting packages restore
2018-12-14T22:00:57.064 [Information] Restoring packages for D:\local\Temp\9e814101-fe35-42aa-ada5-f8435253eb83\function.proj...
2016-04-04T19:02:50.511 Restoring packages for D:\home\site\wwwroot\HttpTriggerCSharp1\function.proj...
2018-12-14T22:01:00.844 [Information] Installing Newtonsoft.Json 10.0.2.
2018-12-14T22:01:01.041 [Information] Installing Microsoft.ProjectOxford.Common.DotNetStandard 1.0.0.
2018-12-14T22:01:01.140 [Information] Installing Microsoft.ProjectOxford.Face.DotNetStandard 1.0.0.
2018-12-14T22:01:09.799 [Information] Restore completed in 5.79 sec for D:\local\Temp\9e814101-fe35-42aa-ada5-f8435253eb83\function.proj.
2018-12-14T22:01:10.905 [Information] Packages restored.

환경 변수Environment variables

환경 변수 또는 앱 설정 값을 가져오려면 다음 코드 예제와 같이 System.Environment.GetEnvironmentVariable을 사용합니다.To get an environment variable or an app setting value, use System.Environment.GetEnvironmentVariable, as shown in the following code example:

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);
}

런타임에 바인딩Binding at runtime

C# 및 기타 .NET 언어에서는 function.jsondeclarative 바인딩과 달리 명령적 바인딩 패턴을 사용할 수 있습니다.In C# and other .NET languages, you can use an imperative binding pattern, as opposed to the declarative bindings in function.json. 명령적 바인딩은 바인딩 매개 변수를 디자인 타임이 아닌 런타임에 계산해야 할 경우 유용합니다.Imperative binding is useful when binding parameters need to be computed at runtime rather than design time. 이 패턴을 사용하면 함수 코드에서 지원되는 입력 및 출력 바인딩을 즉시 바인딩할 수 있습니다.With this pattern, you can bind to supported input and output bindings on-the-fly in your function code.

다음과 같이 명령적 바인딩을 정의합니다.Define an imperative binding as follows:

  • 원하는 명령적 바인딩에 대한 function.json에 항목을 포함하지 마세요.Do not include an entry in function.json for your desired imperative bindings.
  • 입력 매개 변수 Binder binder 또는 IBinder binder에 전달합니다.Pass in an input parameter Binder binder or IBinder binder.
  • 다음 C# 패턴을 사용하여 데이터 바인딩을 수행합니다.Use the following C# pattern to perform the data binding.
using (var output = await binder.BindAsync<T>(new BindingTypeAttribute(...)))
{
    ...
}

BindingTypeAttribute는 바인딩을 정의하는 .NET 특성이며, T는 해당 바인딩 형식에서 지원되는 입력 또는 출력 형식입니다.BindingTypeAttribute is the .NET attribute that defines your binding and T is an input or output type that's supported by that binding type. Tout 매개 변수 형식(예: out JObject)일 수 없습니다.T cannot be an out parameter type (such as out JObject). 예를 들어 Mobile Apps 테이블 출력 바인딩은 6 개의 출력 형식을지원 하지만 T의 경우에는 ICollector @ No__t-2t > 또는 IAsyncCollector<T> 만 사용할 수 있습니다.For example, the Mobile Apps table output binding supports six output types, but you can only use ICollector<T> or IAsyncCollector<T> for T.

단일 특성 예제Single attribute example

다음 예제 코드에서는 런타임에서 정의된 Blob경로를 사용하는 Storage Blob 출력 바인딩을 만든 다음, Blob에 문자열을 씁니다.The following example code creates a Storage blob output binding with blob path that's defined at run time, then writes a string to the 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!!");
    }
}

BlobAttributeStorage Blob 입력 또는 출력 바인딩을 정의하며, TextWriter는 지원되는 출력 바인딩 형식입니다.BlobAttribute defines the Storage blob input or output binding, and TextWriter is a supported output binding type.

다중 특성 예제Multiple attribute example

앞의 예제에서는 함수 앱의 주 Storage 계정 연결 문자열(AzureWebJobsStorage)에 대한 앱 설정을 가져옵니다.The preceding example gets the app setting for the function app's main Storage account connection string (which is AzureWebJobsStorage). StorageAccountAttribute를 추가하고 BindAsync<T>()에 특성 배열을 전달하여 스토리지 계정에 사용할 사용자 지정 앱 설정을 지정할 수 있습니다.You can specify a custom app setting to use for the Storage account by adding the StorageAccountAttribute and passing the attribute array into BindAsync<T>(). IBinder가 아닌 Binder 매개 변수를 사용합니다.Use a Binder parameter, not IBinder. 예를 들어 다음과 같은 가치를 제공해야 합니다.For example:

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!");
    }
}

다음 표에는 각 바인딩 유형의 .NET 특성과 해당 특성이 정의된 패키지가 나열되어 있습니다.The following table lists the .NET attributes for each binding type and the packages in which they are defined.

바인딩Binding 특성Attribute 추가 참조Add reference
Cosmos DBCosmos DB Microsoft.Azure.WebJobs.DocumentDBAttribute #r "Microsoft.Azure.WebJobs.Extensions.CosmosDB"
Event HubsEvent Hubs Microsoft.Azure.WebJobs.ServiceBus.EventHubAttribute, Microsoft.Azure.WebJobs.ServiceBusAccountAttributeMicrosoft.Azure.WebJobs.ServiceBus.EventHubAttribute, Microsoft.Azure.WebJobs.ServiceBusAccountAttribute #r "Microsoft.Azure.Jobs.ServiceBus"
Mobile AppsMobile Apps Microsoft.Azure.WebJobs.MobileTableAttribute #r "Microsoft.Azure.WebJobs.Extensions.MobileApps"
Notification HubsNotification Hubs Microsoft.Azure.WebJobs.NotificationHubAttribute #r "Microsoft.Azure.WebJobs.Extensions.NotificationHubs"
Service BusService Bus Microsoft.Azure.WebJobs.ServiceBusAttribute, Microsoft.Azure.WebJobs.ServiceBusAccountAttributeMicrosoft.Azure.WebJobs.ServiceBusAttribute, Microsoft.Azure.WebJobs.ServiceBusAccountAttribute #r "Microsoft.Azure.WebJobs.ServiceBus"
Storage 큐Storage queue Microsoft.Azure.WebJobs.QueueAttribute, Microsoft.Azure.WebJobs.StorageAccountAttributeMicrosoft.Azure.WebJobs.QueueAttribute, Microsoft.Azure.WebJobs.StorageAccountAttribute
Storage BlobStorage blob Microsoft.Azure.WebJobs.BlobAttribute, Microsoft.Azure.WebJobs.StorageAccountAttributeMicrosoft.Azure.WebJobs.BlobAttribute, Microsoft.Azure.WebJobs.StorageAccountAttribute
Storage 테이블Storage table Microsoft.Azure.WebJobs.TableAttribute, Microsoft.Azure.WebJobs.StorageAccountAttributeMicrosoft.Azure.WebJobs.TableAttribute, Microsoft.Azure.WebJobs.StorageAccountAttribute
TwilioTwilio Microsoft.Azure.WebJobs.TwilioSmsAttribute #r "Microsoft.Azure.WebJobs.Extensions.Twilio"

다음 단계Next steps