【问题标题】:Error when using a precompiled Azure Function with extra methods使用带有额外方法的预编译 Azure 函数时出错
【发布时间】:2017-05-28 21:02:10
【问题描述】:

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

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.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',或与在 “入口点”元数据属性。函数编译错误错误 AF007:与提供的入口点名称匹配的方法 配置('ExternalFunction.Foo.Run')不存在。您的 函数必须包含一个公共方法,一个名为的公共方法 'Run',或与在 'entryPoint' 元数据属性。

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

有什么想法吗?

【问题讨论】:

    标签: azure azure-functions


    【解决方案1】:

    这确实很奇怪。

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

    【讨论】:

    • 这确实是一个错误,我只是结束了一些测试以打开一个带有修复程序的 PR。感谢您的报告!与此同时,上述解决方法应该对您有用,但如果您仍有问题,请告诉我。
    猜你喜欢
    • 2017-09-08
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多