Azure Function BlobTrigger:Microsoft.WindowsAzure.Storage:无法建立连接,因为目标机器主动拒绝它

Azure Function BlobTrigger: Microsoft.WindowsAzure.Storage: No connection could be made because the target machine actively refused it

我无法 运行 我在 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"
    }
  }
}

谢谢。

您的代码几乎是正确的。您需要在 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 -> "Upload Local Settings"

  1. 您还可以从 Azure 门户设置应用程序设置

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

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

这对我有用:

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

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

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

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

AzureStorageEmulator.exe init /forceCreate

现在您应该可以 运行 azure 函数了,没有任何问题。