0

単純な Azure 関数を作成する方法に困惑しています。Visual Studio 2017 (私はバージョン 15.5.6 を使用しています) で、次の手順に従って簡単なプロジェクトを作成します: https://docs.microsoft.com/en-us/azure/azure-functions/functions-develop-vs

私の手順:

  1. 新しい Azure Functions プロジェクトを作成し、フレームワークを既定の .Net Framework 4.6.1 のままにします。
  2. 次の画面で HttpTrigger を選択すると、ドロップダウンに "Azure Functions v1 (.NET Framework)" と表示されます
  3. ストレージを、ポータルで既に作成した Azure ストレージに設定し、承認を「管理者」に設定します。

すべてが正常にコンパイルされます。PostMan 経由で関数を呼び出すと、次のエラーが発生します。

「関数の実行中に ScriptHost エラーが発生しました: Functions.Function1。Microsoft.Azure.WebJobs.Host: パラメーター 'log' をバインドする例外。Microsoft.Azure.WebJobs.Host: パラメーター 'log' に値が指定されていません。」

参考までに、私がまったく変更していない、彼らが作成したテンプレート関数を次に示します。

using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;

namespace TestFunc
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Admin, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            // parse query parameter
            string name = req.GetQueryNameValuePairs()
                .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
                .Value;

            // Get request body
            dynamic data = await req.Content.ReadAsAsync<object>();

            // Set name to query string or body data
            name = name ?? data?.name;

            return name == null
                ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
                : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
        }
    }
}

「TraceWriter ログ」と「log.Info(....」への呼び出しを削除してから再試行すると、代わりに次のエラーが発生します。

「ScriptHost エラーが発生しました関数の実行中に例外が発生しました: Functions.Function1。mscorlib: 呼び出しのターゲットによって例外がスローされました。TestFunc: メソッドが見つかりません: 'System.Net.Http.HttpResponseMessage System.Net.Http.HttpRequestMessageExtensions. CreateResponse(System.Net.Http.HttpRequestMessage, System.Net.HttpStatusCode, !!0)'."

.Net バージョンを 4.7 に変更しようとしましたが、何も変わりませんでした。関数のバージョンを v1 ではなく v2 に変更しようとしましたが (現時点ではベータ版ですが)、何も起こりませんでした。テンプレートによって追加される唯一の NuGet パッケージは、Microsoft.NET.Sdk.Functions バージョン 1.0.6 です。利用可能な 1.0.7 へのアップデートがありますが、それも役に立ちません。

何を試せばいいのかわからない。これがデフォルトのテンプレートです。私は正常に動作する別の関数プロジェクトを持っていますが、それはVS2015が最新だった少し前に行われ、プリコンパイルされたDLLを作成するためにこれらのfunction.jsonファイルが必要だった時期でした。現在のシステムが最善の方法であると思われるため、現在のシステムを使用できることを望んでいましたが、これが機能しない場合は、古い方法に戻るだけかもしれません. ありがとう。

4

0 に答える 0