2010-10-22 13 views
5

Mi aplicación 'LocalClient' está en una LAN corporativa detrás de un servidor proxy HTTP (ISA). La primera llamada de API de Azure que realizo - CloudQueue.CreateIfNotExist() - causa una excepción: (407) Se requiere autenticación de proxy. Probé siguientes cosas:Conexión a la cuenta de almacenamiento de Azure a través del servidor proxy

Según MSDN, un servidor proxy HTTP se puede especificar en la cadena de conexión sólo en caso de almacenamiento Desarrollo (ver http://msdn.microsoft.com/en-us/library/ee758697.aspx):
UseDevelopmentStorage=true;DevelopmentStorageProxyUri= http://myProxyUri

¿Hay alguna manera de conectar con el almacenamiento de Azure a través un servidor proxy?

Respuesta

3

La solución de proxy personalizado (la tercera cosa que probé como mencioné en mi pregunta original) funcionó a la perfección. El error que estaba haciendo antes no era poner el elemento <configSections> al comienzo de <configuration> en app.config, según sea necesario. Al hacer eso, la solución de proxy personalizado dado here resolvió mi problema.

7

De hecho, encontré que la solución de proxy personalizado no era necesaria.

Agregar lo siguiente en App.config (justo antes de la </configuration>) hizo el truco para mí:

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

Sí, eso debería funcionar para la mayoría de los casos, supongo. Yo también lo había intentado. Pero en mi caso, el servidor proxy (Squid) esperaba el nombre de usuario sin dominio. Mientras que el nombre de usuario registrado que se le envió (según la configuración 'useDefaultCredentials') estaba en el formato \ . Entonces no se autenticaría. – amolbk

+0

¡Gracias, su solución me ayudó! – codebot

+0

Esto funcionó para mí también (mi aplicación se colgó cuando intenté realizar cualquier operación en una mesa). – Adam

0

Para pasar por el proxy, por favor utilice como a continuación, funciona como se esperaba y el mismo ha sido probado

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 o C#, por favor, añadir a continuación el código para "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> 
Cuestiones relacionadas