Connecting to Azure storage account thru proxy server

后端 未结 3 1070
情话喂你
情话喂你 2021-02-09 00:25

My \'LocalClient\' app is in a corporate LAN behind an HTTP proxy server (ISA). The first Azure API call i make - CloudQueue.CreateIfNotExist() - causes an exceptio

相关标签:
3条回答
  • 2021-02-09 01:07

    I actually found that the custom proxy solution was not required.

    Adding the following to app.config (just before the </configuration>) did the trick for me:

    <system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
    <proxy usesystemdefault="true" />
    </defaultProxy>
    </system.net>
    
    0 讨论(0)
  • 2021-02-09 01:13

    To by pass the proxy then please use like below, it works as expected and same has been tested.

    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 or C# then please add below code to "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>
    
    0 讨论(0)
  • 2021-02-09 01:23

    The custom proxy solution (the third thing i tried as mentioned in my original question) worked perfectly. The mistake i was doing earlier was not putting the <configSections> element at the beginning of <configuration> in app.config as required. On doing that, the custom proxy solution given here solved my problem.

    0 讨论(0)
提交回复
热议问题