Подключение к учетной записи хранения Azure через прокси-сервер - PullRequest
7 голосов
/ 22 октября 2010

Мое приложение LocalClient находится в корпоративной локальной сети за прокси-сервером HTTP (ISA). Первый вызов API Azure, который я выполняю - CloudQueue.CreateIfNotExist() - вызывает исключение: (407) Требуется проверка подлинности прокси. Я пробовал следующие вещи:

  • Добавлен элемент <code><System.Net> defaultProxy в app.config, но он не работает (ссылка: http://geekswithblogs.net/mnf/archive/2006/03/08/71663.aspx).
  • Я настроил «Клиент брандмауэра Microsoft для ISA Server», но это тоже не помогло.
  • Использовал собственный прокси-обработчик, как предложено здесь: http://dunnry.com/blog/2010/01/25/SupportingBasicAuthProxies.aspx. Я не могу заставить это работать - получаю исключение инициализации конфигурации.

Согласно MSDN, прокси-сервер HTTP может быть указан в строке подключения только в случае хранилища разработки (см. http://msdn.microsoft.com/en-us/library/ee758697.aspx):
UseDevelopmentStorage=true;DevelopmentStorageProxyUri=<a href="http://myProxyUri" rel="noreferrer">http://myProxyUri</a>

Есть ли способ подключиться к хранилищу Azure через прокси-сервер?

Ответы [ 3 ]

7 голосов
/ 04 сентября 2012

Я действительно обнаружил, что настраиваемое прокси-решение не требуется.

Добавление следующего в app.config (непосредственно перед </configuration>) помогло мне:

<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="true" />
</defaultProxy>
</system.net>
3 голосов
/ 29 октября 2010

Настраиваемое прокси-решение (третье, что я пробовал, как упоминалось в моем первоначальном вопросе), работало отлично.Ошибка, которую я делал ранее, заключалась не в том, чтобы поместить элемент <configSections> в начале <configuration> в app.config, как требуется.После этого пользовательское прокси-решение, данное здесь , решило мою проблему.

0 голосов
/ 21 марта 2017

Чтобы обойти прокси-сервер, используйте, как показано ниже, он работает, как ожидалось, и то же самое было проверено. public class AzureUpload { // Define the connection-string with your values /*public static final String storageConnectionString = "DefaultEndpointsProtocol=http;" + "AccountName=your_storage_account;" + "AccountKey=your_storage_account_key";*/ public static final String storageConnectionString = "DefaultEndpointsProtocol=http;" + "AccountName=test2rdrhgf62;" + "AccountKey=1gy3lpE7Du1j5ljKiupjhgjghjcbfgTGhbntjnRfr9Yi6GUQqVMQqGxd7/YThisv/OVVLfIOv9kQ=="; // Define the path to a local file. static final String filePath = "D:\\Project\\Supporting Files\\Jar's\\Azure\\azure-storage-1.2.0.jar"; static final String file_Path = "D:\\Project\\Healthcare\\Azcopy_To_Azure\\data"; public static void main(String[] args) { try { // Retrieve storage account from connection-string. //String storageConnectionString = RoleEnvironment.getConfigurationSettings().get("StorageConnectionString"); //Proxy httpProxy = new Proxy(Proxy.Type.HTTP,new InetSocketAddress("132.186.192.234",8080)); System.setProperty("http.proxyHost", "102.122.15.234"); System.setProperty("http.proxyPort", "80"); System.setProperty("https.proxyUser", "ad001\\empid001"); System.setProperty("https.proxyPassword", "pass!1"); // Retrieve storage account from connection-string. CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString); // Create the blob client. CloudBlobClient blobClient = storageAccount.createCloudBlobClient(); // Get a reference to a container. // The container name must be lower case CloudBlobContainer container = blobClient.getContainerReference("rpmsdatafromhospital"); // Create the container if it does not exist. container.createIfNotExists(); // Create a permissions object. BlobContainerPermissions containerPermissions = new BlobContainerPermissions(); // Include public access in the permissions object. containerPermissions.setPublicAccess(BlobContainerPublicAccessType.CONTAINER); // Set the permissions on the container. container.uploadPermissions(containerPermissions); // Create or overwrite the new file to blob with contents from a local file. /*CloudBlockBlob blob = container.getBlockBlobReference("azure-storage-1.2.0.jar"); File source = new File(filePath); blob.upload(new FileInputStream(source), source.length());*/ String envFilePath = System.getenv("AZURE_FILE_PATH"); //upload list of files/directory to blob storage File folder = new File(envFilePath); File[] listOfFiles = folder.listFiles(); for (int i = 0; i < listOfFiles.length; i++) { if (listOfFiles[i].isFile()) { System.out.println("File " + listOfFiles[i].getName()); CloudBlockBlob blob = container.getBlockBlobReference(listOfFiles[i].getName()); File source = new File(envFilePath+"\\"+listOfFiles[i].getName()); blob.upload(new FileInputStream(source), source.length()); System.out.println("File " + listOfFiles[i].getName()+ " upload successful"); } //directory upload /*else if (listOfFiles[i].isDirectory()) { System.out.println("Directory " + listOfFiles[i].getName()); CloudBlockBlob blob = container.getBlockBlobReference(listOfFiles[i].getName()); File source = new File(file_Path+"\\"+listOfFiles[i].getName()); blob.upload(new FileInputStream(source), source.length()); }*/ } }catch (Exception e) { // Output the stack trace. e.printStackTrace(); } } } .Net или C #, затем, пожалуйста, добавьте следующий код в "App.config"

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>

    <system.net> 
     <defaultProxy enabled="true" useDefaultCredentials="true"> 
       <proxy usesystemdefault="true" /> 
     </defaultProxy>
    </system.net>

</configuration>
...