2010-10-22 18 views
5

La mia app "LocalClient" si trova in una LAN aziendale dietro un server proxy HTTP (ISA). La prima chiamata API di Azure che faccio - CloudQueue.CreateIfNotExist() - provoca un'eccezione: (407) Autenticazione proxy richiesta. Ho provato seguenti cose:Connessione all'account di archiviazione Azure tramite server proxy

Secondo MSDN, un server proxy HTTP può essere specificato nella stringa di connessione solo in caso di sviluppo di stoccaggio (vedi http://msdn.microsoft.com/en-us/library/ee758697.aspx):
UseDevelopmentStorage=true;DevelopmentStorageProxyUri= http://myProxyUri

Esiste un modo per connettersi alla Azure thru un server proxy?

risposta

3

La soluzione proxy personalizzata (la terza cosa che ho provato come menzionato nella mia domanda originale) ha funzionato perfettamente. L'errore che stavo facendo in precedenza non stava mettendo l'elemento <configSections> all'inizio di <configuration> in app.config come richiesto. Facendo ciò, la soluzione proxy personalizzata data here ha risolto il mio problema.

7

In realtà ho trovato che la soluzione proxy personalizzata non era necessaria.

aggiungi queste righe a app.config (appena prima del </configuration>) ha fatto il trucco per me:

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

Sì, che dovrebbe funzionare per la maggior parte dei casi, suppongo. Ci avevo provato anche io. Ma nel mio caso, il server proxy (Squid) si aspettava il nome utente senza dominio. Mentre il nome utente registrato che gli è stato inviato (come per l'impostazione 'useDefaultCredentials') era nel formato \ . Quindi non verrebbe autenticato. – amolbk

+0

Grazie, la tua soluzione mi ha aiutato! – codebot

+0

Questo ha funzionato anche per me (la mia domanda era bloccata quando ho tentato di fare qualsiasi operazione su un tavolo). – Adam

0

Per passare dal proxy quindi si prega di utilizzare come qui di seguito, funziona come previsto e lo stesso è stato testato.

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# quindi si prega di aggiungere il codice qui sotto a "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> 
Problemi correlati