1

Azure ストレージ アカウントに接続された ac# プログラムを作成します。

BLOB URI が与えられたら、ファイルをローカル ファイルにダウンロードして実行する必要があります。

ここに私のコードがあります:

var blobClientCode = client.CreateCloudBlobClient();
CloudBlockBlob codeBlob = blobClientCode.GetBlockBlobReference(codeUri);
File.Create("C:\\code.exe");
using (var fileStream = File.OpenWrite("C:\\code.exe")) {
     codeBlob.DownloadToStream(fileStream);
}

Process p = new Process();
p.StartInfo.FileName = "C:\\mycode.exe";
p.StartInfo.Arguments = dataUri;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = false;
p.StartInfo.UseShellExecute = false;
p.Start();
p.WaitForExit();
string output = p.StandardOutput.ReadToEnd();

問題は、UnauthorizedAccess Exception が発生し続けることです。

  • ブラウザからファイルを手動でダウンロードしようとすると(URIをコピーして貼り付けます)、成功します。
  • コンテナはパブリックなものです。
  • 私も WebClient.DownloadFile() を使用しようとしましたが、WebException が発生しました。

私は何が欠けていますか?前もって感謝します

4

3 に答える 3

1

webclient.DownloadFile を呼び出す前に、以下のコード スニペットを含めてみてください。それがうまくいくことを願っています..

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

    ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(delegate { return true; });

 WebClient webclient = new WebClient();
webclient.DownloadFile(new Uri(URIPath), LocalPath);

注:プロキシを使用してインターネットにアクセスしている場合は、プロキシ設定を設定する必要がある場合があります

WebProxy ProxyObject = ProxySetting;
webclient.Proxy = ProxySetting

;

これは基本的に、証明書が検証されているかどうかに関係なく、ページをナビゲートします。

于 2013-04-14T07:37:33.793 に答える
1

わかりましたので、皆さんのおかげで、私は最終的に解決策にたどり着きました:

私が最終的に行ったのは、次のように、ロールのサービス定義でローカル ストレージを定義することでした。

<LocalResources>
<LocalStorage name="myLocalStorage" sizeInMB="10" cleanOnRoleRecycle="false" />
</LocalResources>

次に、このローカル ストレージを使用して、BLOB からファイルをダウンロードして実行します。

LocalResource localResource = RoleEnvironment.GetLocalResource("myLocalStorage");
string PathToFile = Path.Combine(localResource.RootPath, "mycode.exe");
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(delegate { return true; });
WebClient webclient = new WebClient();
webclient.DownloadFile(codeUri, PathToFile);

Process p = new Process(); //...

皆様に改めて感謝申し上げます

于 2013-04-15T10:40:44.353 に答える