Objective
C/C++로 작성한 Dll을 참조한 Azure Functions을 구축
Prerequisite
Visual Studio 2017 version 15.5 or later
Azure Development WorkLoad가 설치되어야 합니다.
Azure Subscription이 필요합니다.
Azure Storage account가 필요합니다.
Tools > Extensions and Update > Azure Functions and Web Jobs Tools를 설치하여야 합니다.
Create Azure Functions project
Project > New Project에서 Azure Functions Template을 선택하고 Name을 작성하고, OK 버튼을 클릭합니다.
좌상단의 Azure Functions v2를 선택합니다. (v1은 .net Framework, v2은 .net core)
Http 요청에 따라 실행하는 sample을 만들기 위해서 좌측의 icon list에서 Http trigger를 선택합니다.
Http trigger유형은 Storage account가 필요하지 않습니다.(그대로 둡니다.)
테스트를 위해서 접속권한은 anonymous로 만듭니다.
Unmanaged Code Dll을 project에 참조합니다.
Code는 본문 Output > Unmanaged Code부분 참조
Function 코드를 수정하여 Unmanaged Code를 참조합니다.
Code는 본문 Output > Function Code부분 참조
Deploy
배포하기
Azure Functions project를 우클릭하여 Publish 메뉴 선택
신규로 생성하거나, 기존의 것을 선택하여 배포할 위치를 선택한 뒤 Publish 버튼 클릭.
Visual Studio의 Output window를 통해서 배포 여부 확인 및 실증.
Upload dll
KUDU를 활용하여, 해당 folder에 dll에 파일을 수동으로 업로드가 가능함.
KUDU에 접속하여 Debug console > CMD 메뉴로 이동
Site/wwwroot/bin 폴더로 이동
파일 목록 영역에 Drag&Drop으로 파일을 업로드
Output
Unmanaged Code
#include <stdio.h>
extern "C"
{
__declspec(dllexport) double FetchPie() {
return 3.14L;
}
}
Function Code
public static class Function1
{
[DllImport("D:\\home\\site\\wwwroot\\bin\\TestLib.dll")]
public static extern double FetchPie();
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] 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;
name += FetchPie().ToString(); // Unmanaged Code Call
return name != null
? (ActionResult)new OkObjectResult($"Hello, {name}")
: new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}
}
References
Develop Azure Functions using Visual Studio
https://docs.microsoft.com/en-us/azure/azure-functions/functions-develop-vs
How to add assembly references to an Azure Function App
how to create a DLL library in C and then use it with C#
https://www.codeproject.com/Articles/9826/How-to-create-a-DLL-library-in-C-and-then-use-it-w