Azure 関数の作成

完了

SaaS バージョンの Business Central では、.NET 相互運用を使用できません。 Azure Functions を使用すれば、ある方法を利用して .NET ライブラリへの接続が可能になります。 Azure portal のコード エディターを使用し、C# で直接開発を行うと同時に、独自の .NET DLL ライブラリを開発すれば、Azure 関数アプリ内で使用できるようになります。

次のコード例は、小規模な .NET クラス ライブラリを作成する方法を示しています。 クラス ライブラリに含まれる BlackAndWhiteConverter クラスは、画像にグレースケールを適用します。 この画像は、HttpRequestMessage を使用してパラメーターとして渡されます。 そのために、外部ライブラリである ImageProcessor が使用されています。

次の例は、C# の実装も示しています。

using ImageProcessor;
using ImageProcessor.Imaging.Filters.Photo;
using System.IO;
using System.Net.Http;

namespace BlackAndWhitePicture
{
    public class BlackAndWhiteConverter
    {
        public HttpResponseMessage Convert(HttpRequestMessage request)
        {
            var stream = request.Content.ReadAsStreamAsync().Result;
            byte[] outArray;
            using (var outStream = new MemoryStream())
            {
                using (var imageFactory = new ImageFactory())
                {
                    imageFactory.Load(stream)
                        .Filter(MatrixFilters.GreyScale)
                        .Save(outStream);
                }
                outArray = outStream.ToArray();
            }

            var result = new HttpResponseMessage(HttpStatusCode.OK);
            result.Content = new ByteArrayContent(outArray);
            result.Content.Headers.ContentType = 
                   new MediaTypeHeaderValue("image/jpg");
            return result;
        }
    }
}

.NET クラス ライブラリの実行結果である .DLL ファイルを Azure にアップロードし、Azure 関数で使用しています。 .NET ライブラリをアップロードするには、まず開いてから (https://<yourfunctionapp>.scm.azurewebsites.net)、.scm を azurewebsites.net ドメイン名の前に挿入します。 ログインした後に、デバッグ コンソール メニューのコマンド プロンプトを開き、アプリのフォルダーに移動して bin という名前のサブフォルダーを作成します。 この在庫置場フォルダーに、.NET DLL ファイルをドラッグアンドドロップすることができます。

[Kudu アプリの環境] ページのスクリーンショット

.NET ファイルをアップロードすると、Azure 関数で使用できるようになります。 その場合、#r という特別な構文を使用する必要があります。 この構文は、外部アセンブリを参照するために使用します。 次の例では、前の例の .NET ライブラリを Azure 関数で使用しています。

#r "D:\home\site\wwwroot\ImageConverter\bin\BlackAndWhitePicture.dll"
#r "D:\home\site\wwwroot\ImageConverter\bin\ImageProcessor.dll"

using System.Net;
using System.Net.Http.Headers;
using System.Drawing;
using BlackAndWhitePicture;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    var converter = new BlackAndWhiteConverter();
    return converter.Convert(req);
}