服务结构访问 unc 驱动器以存储文件。可能吗?

Service fabric accessing unc drive to store a file. is it possible?

我在 Service fabric(自托管)中有一个服务(.net 核心)运行。我尝试在互联网上搜索以找到一些资源来帮助我构建可能的解决方案,但到目前为止未能获得良好的可靠来源。

我脑子里有两个可能的想法: 1) 像对待任何其他驱动器一样对待 unc 驱动器并使用 StreamReader 和 Streamwriter。

2) 将文件挂载为本地驱动器(以某种方式)并使用基于 this

的 StreamReader 和 Streamwrier

目前我还没有完全理解第二个。

它能否访问 unc 驱动器来存储和检索文件? 我该怎么做呢?

将 unc 驱动器挂载为本地驱动器可能是最简单的。

您可以script 装载到文件共享。将凭据放入配置中。 运行 脚本作为服务的 setup entry point。 确保脚本运行 idempotent.

示例脚本:

$resourceGroupName = "<your-resource-group-name>"
$storageAccountName = "<your-storage-account-name>"
$fileShareName = "<your-file-share-name>"

# These commands require you to be logged into your Azure account, run Login-AzAccount if you haven't
# already logged in.
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName
$storageAccountKeys = Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName
$fileShare = Get-AzStorageShare -Context $storageAccount.Context | Where-Object { 
    $_.Name -eq $fileShareName -and $_.IsSnapshot -eq $false
}

if ($fileShare -eq $null) {
    throw [System.Exception]::new("Azure file share not found")
}

# The value given to the root parameter of the New-PSDrive cmdlet is the host address for the storage account, 
# <storage-account>.file.core.windows.net for Azure Public Regions. $fileShare.StorageUri.PrimaryUri.Host is 
# used because non-Public Azure regions, such as sovereign clouds or Azure Stack deployments, will have different 
# hosts for Azure file shares (and other storage resources).
$password = ConvertTo-SecureString -String $storageAccountKeys[0].Value -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList "AZURE$($storageAccount.StorageAccountName)", $password
New-PSDrive -Name <desired-drive-letter> -PSProvider FileSystem -Root "\$($fileShare.StorageUri.PrimaryUri.Host)$($fileShare.Name)" -Credential $credential -Persist

从那时起,您可以按照自己认为合适的方式使用驱动器。例如,通过使用 System.IO.File.ReadAllText 和 {desired-drive-letter}.