単純な Azure 関数を作成する方法に困惑しています。Visual Studio 2017 (私はバージョン 15.5.6 を使用しています) で、次の手順に従って簡単なプロジェクトを作成します: https://docs.microsoft.com/en-us/azure/azure-functions/functions-develop-vs
私の手順:
- 新しい Azure Functions プロジェクトを作成し、フレームワークを既定の .Net Framework 4.6.1 のままにします。
- 次の画面で HttpTrigger を選択すると、ドロップダウンに "Azure Functions v1 (.NET Framework)" と表示されます
- ストレージを、ポータルで既に作成した 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ファイルが必要だった時期でした。現在のシステムが最善の方法であると思われるため、現在のシステムを使用できることを望んでいましたが、これが機能しない場合は、古い方法に戻るだけかもしれません. ありがとう。