参照先:クラウド サービスの各インスタンスで Azure ファイル サービス CloudFileShare を仮想ディレクトリとしてマッピングする
Azure Cloud Service で仮想ディレクトリを作成しようとすると問題が発生し、仮想ディレクトリが Azure ファイル サービスにマップされます。
私がやった事
1) <Runtime executionContext="elevated" />
ServiceDefinition.csdef で webrole に使用
2) WebRole.cs でドライブをマウントします ( http://blogs.msdn.com/b/windowsazurestorage/archive/2014/05/27/persisting-connections-to-microsoft-azure-files.aspxで説明されているように) PaaS) アプリ起動でもやってます。
public static void MountShare(string shareName,
string driveLetterAndColon,
string username,
string password)
{
if (!String.IsNullOrEmpty(driveLetterAndColon))
{
// Make sure we aren't using this driveLetter for another mapping
WNetCancelConnection2(driveLetterAndColon, 0, true);
}
NETRESOURCE nr = new NETRESOURCE();
nr.dwType = ResourceType.RESOURCETYPE_DISK;
nr.lpRemoteName = shareName;
nr.lpLocalName = driveLetterAndColon;
int result = WNetAddConnection2(nr, password, username, 0);
if (result != 0 || result != 85)
//85 indicates the drive name is already used. in this scenario, it means the drive is already mapped.
{
throw new Exception("WNetAddConnection2 failed with error " + result);
}
}
3) WebRole.cs で、次のように仮想ディレクトリを作成します。
app.VirtualDirectories.Add("/asset/cms", @"s:\cms");
4) WebRole.cs では、以下を使用して、リモート デスクトップ用に作成した管理者アカウントで AppPool を実行します。
applicationPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
applicationPool.ProcessModel.UserName = appPoolUser;
applicationPool.ProcessModel.Password = appPoolPass;
applicationPool.ProcessModel.LoadUserProfile = true;
問題:
/asset/cms から何も取得できません。内部のファイルにアクセスしようとすると、500.19 が返され、「ページの関連構成データが無効なため、要求されたページにアクセスできません。'、具体的には存在しない s:\cms\web.config を指しています。クラウド サービス インスタンスにリモートでアクセスし、IIS マネージャーを開くと、仮想ディレクトリが正しく作成されていることがわかります。
許可の問題だと思います。しかし、ネットワーク ドライブにマップされているため、仮想ディレクトリのアクセス許可を編集できません。
どうすればこの問題を解決できますか? -- 上記の問題が解決され、クラウド サービスがファイル サービス共有にアクセスできるようになりました。しかし、新しい問題 - network_service ID を使用して AppPool を実行することは可能ですか?