在 Windows Server Container 中运行 Azure Storage Emulator(一):能否监听自定义地址?

时间:2022-01-06 17:06:59

  我要做什么?

  1. 改 ASE 的监听地址。对于有强迫症的我来说,ASE 默认监听的是 127.0.0.1:10000-10002,这让我无法接受,所以我要将它改成域名 + 80 端口的方式;
  2. 放到容器中。ASE 只允许单实例运行,难道为了这玩意儿,我要在三个环境下开三个虚拟机?
  3. 连接 SQL Server,而不是 SQL Server Express LocalDB。DEV/QA 各有其 SQL Server Instance,当然要桥归桥,路归路。

  要改变 ASE 的监听地址,首先要确认它有没有使用 HTTP Listener(即 HTTP.sys),否则无法支持端口共享。这个简单,运行起 ASE,netstat -ano 看到端口 10000-10002 的 PID 为 4,基本就可以断定了,但我们还是要进一步确认一下。

  打开 C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe.config,将 StorageEmulatorConfig 中的监听地址和帐号改成这个样子:

<StorageEmulatorConfig>
<services>
<service name="Blob" url="http://dev.blob.contoso.com/"/>
<service name="Queue" url="http://dev.queue.contoso.com/"/>
<service name="Table" url="http://dev.tablecontoso.com/"/>
</services>

<accounts>
<account name="dev" authKey="Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==" />
</accounts>
</StorageEmulatorConfig>

 

  以管理员方式运行 ASE,结果如下:

在 Windows Server Container 中运行 Azure Storage Emulator(一):能否监听自定义地址?

 

  看到这里,各位看官可能要问,为什么监听的地址前面要加个“dev.”而不是直接用“blob.contoso.com”这样的地址呢?咳,还不是为了 Azure Storage Explorer。我们看看 Azure Storage Explorer 的连接页面:

在 Windows Server Container 中运行 Azure Storage Emulator(一):能否监听自定义地址?

 

  为了能让 Azure Storage Explore 能连接上。在 Azure Storage Explore 的连接页面上,第一种方式就不用想了,因为你是模拟器;第二种连接方式是使用连接字符串,Azure Storage Emulator 的连接字符串格式必须带有 /AccountName 的后缀(见 https://docs.microsoft.com/en-us/azure/storage/common/storage-use-emulator),尝试一下:

在 Windows Server Container 中运行 Azure Storage Emulator(一):能否监听自定义地址?

 

   虽然这是我最想要的连接方式,但显然 Azure Storage Explorer 并不接受这样的连接串。那么只剩下第三种:

在 Windows Server Container 中运行 Azure Storage Emulator(一):能否监听自定义地址?

 

   结果:

 在 Windows Server Container 中运行 Azure Storage Emulator(一):能否监听自定义地址?

 

  Azure Storage Explorer 把我们的域名改成了 accountname.blob.contoso.com 这样的格式,哎,这是 Azure 的 Storage Account 的 套路,虽然前面挂个“dev.”,后边挂个“/dev”,但也勉强接受了。建个 container 试试:

在 Windows Server Container 中运行 Azure Storage Emulator(一):能否监听自定义地址?

 

 Okay!下一节,我们要尝试使用自定义的 SQL Server 实例。