使用预编译的Azure函数和其他方法

时间:2017-01-13 13:13:39

标签: azure azure-functions

我创建了一个非常简单的预编译函数(从生成的工具中复制代码):

public class Foo
    {
        public static async Task<HttpResponseMessage> Run(HttpRequestMessage req)
        {
            //log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}");

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

它所在的dll被复制到Function的文件夹中,并在function.json中链接如下:

{
  "scriptFile": "ExternalFunction.dll",
  "entryPoint": "ExternalFunction.Foo.Run",  
  "disabled": false,
  "bindings": [
    {
      "authLevel": "function",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ]
}

一切正常。

我当时想要做的是添加一个从Run方法调用的私有方法,所以(宝贝步骤)我将它添加到Foo类:

private static string Test()
{
    return "Hello";
}

这会在CLI工具中导致这些错误:

  

错误AF007:匹配中提供的入口点名称的方法   配置('ExternalFunction.Foo.Run')不存在。您的   函数必须包含一个公共方法,一个名为的公共方法   'run',或者匹配在。中指定的名称的公共方法   'entryPoint'元数据属性。函数编译错误错误   AF007:匹配中提供的入口点名称的方法   配置('ExternalFunction.Foo.Run')不存在。您的   函数必须包含一个公共方法,一个名为的公共方法   'run',或者匹配在。中指定的名称的公共方法   'entryPoint'元数据属性。

这是一个非常奇怪的消息,因为确实添加私有静态方法应该对函数能够找到function.json中指定的公共方法没有影响吗?!

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这确实很奇怪。

如果这是一个缺陷(我会更新问题或我的调查结果),我会处理一个repro并打开一个问题来解决问题,但与此同时,你应该能够在不同的类(静态或其他)中创建这些方法,并在该类上调用该方法。