1

我无法在本地运行我用 java 编写的 azure 函数,该函数应该基于 BlobTrigger 工作。

我面临以下错误:

 A host error has occurred
 Microsoft.WindowsAzure.Storage: No connection could be made because the target machine actively refused it. System.Net.Http: No connection could be made because the target machine actively refused it. System.Private.CoreLib: No connection could be made because the target machine actively refused it.

这是我的代码:

public class Function {

    @FunctionName("BlobTrigger")
    @StorageAccount("reseaudiag")
    public void blobTrigger(
            @BlobTrigger(name = "content", path = "filer/{fileName}", dataType = "binary",
            connection = "AzureWebJobsDashboard"
                    ) byte[] content,
            @BindingName("fileName") String fileName,
            final ExecutionContext context
            ) {
        context.getLogger().info("Java Blob trigger function processed a blob.\n Name: " + fileName + "\n Size: " + content.length + " Bytes");

    }
}

仅基于初始运行,我可以开始实现逻辑,但我被阻止运行基本步骤本身。

这是我的 local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=confidential;EndpointSuffix=core.windows.net",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
    "DataConnectionString": "UseDevelopmentStorage=true",
    "ContainerName": "filer"
  },
  "ConnectionStrings": {
    "PlantaoEntities": {
      "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=confidential;EndpointSuffix=core.windows.net",
      "ProviderName": "System.Data.EntityClient"
    }
  }
}

谢谢你。

4

2 回答 2

1

您的代码几乎是正确的。您需要在 blob 触发器中指定正确的连接。

这是我成功的示例:

package com.function;

import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;

public class Function {

    @FunctionName("BlobTrigger")
    public void run(
            @BlobTrigger(name = "trigger", path = "test/{fileName}", dataType = "binary", connection = "AzureWebJobsStorage") byte[] content,
            @BindingName("fileName") String fileName,
            final ExecutionContext context) {
                context.getLogger().info("Blob: " + fileName + " -> Length: " + content.length);
    }
}

我在我的代码中使用了“AzureWebJobsStorage”连接,所以我需要在 local.settings.json 中设置一个连接字符串:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=storagetest789;AccountKey=*******w==;EndpointSuffix=core.windows.net",
    "FUNCTIONS_WORKER_RUNTIME": "java"
  }
}

然后,在本地运行该函数并将文件上传到存储,我将得到如下输出:

在此处输入图像描述


笔记:

  1. 将应用发布到 Azure Function App 时,本地设置文件中的设置不会更新到云端。您需要手动更新它们。

  2. 请确保您已使您的存储帐户可访问。如果为存储帐户启用防火墙,则需要添加客户端 IP 以进行本地测试,并允许受信任的 Microsoft 服务访问您的存储。

在此处输入图像描述


更新

  1. 如果您使用 VS Code 进行开发,您可以从命令面板上传本地设置:F1 -> “上传本地设置”

在此处输入图像描述

  1. 您还可以从 Azure 门户设置应用程序设置 在此处输入图像描述

然后你可以在这里修改设置:

在此处输入图像描述

于 2019-10-09T06:30:42.800 回答
1

我遇到了同样的问题,我真的花了将近 2 天的时间来解决它。

这对我有用: https ://stackoverflow.com/a/57757140/6688910

基本上,我不得不删除位于 %USERPROFILE%/AzureEmulatorStorageDb[Number] 的数据库。其中 AzureEmulatorStrageDb[somenumber] 是它生成的数据库。

接下来,使用 cmd,导航到 Emulator 文件夹

cd C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator

然后通过运行以下命令初始化模拟器

AzureStorageEmulator.exe init /forceCreate

现在您应该能够毫无问题地运行 azure 函数。

于 2021-02-09T00:57:00.550 回答