From a7f2df706e0204595cb92854ce05e671cc02fae1 Mon Sep 17 00:00:00 2001 From: jonathan pickett Date: Tue, 15 Apr 2014 19:01:55 -0700 Subject: [PATCH] Removing install project since we have NuGet and Chocolatey installs. Removing RedisWAInst since Azure fork will handle their own installation. --- msvs/RedisWAInst/README.md | 86 - .../Samples/ServiceConfiguration.Cloud.cscfg | 20 - .../Samples/ServiceConfiguration.Local.cscfg | 22 - .../Samples/ServiceDefinition.csdef | 53 - msvs/RedisWAInst/Samples/redis.conf | 418 - .../bin/Inst4WA/Azure.publishsettings | 11 - .../bin/Inst4WA/DeployCmdlets4WA.dll | Bin 159232 -> 0 bytes msvs/RedisWAInst/bin/Inst4WA/Inst4WA.exe | Bin 12288 -> 0 bytes msvs/RedisWAInst/bin/Inst4WA/remote-setup.ps1 | 139 - msvs/RedisWAInst/bin/RedisDeployCmdlets.dll | Bin 6144 -> 0 bytes msvs/RedisWAInst/bin/RedisDeployCmdlets.psd1 | Bin 4974 -> 0 bytes msvs/RedisWAInst/bin/RedisInstWA.exe | Bin 58880 -> 0 bytes .../Microsoft.WindowsAzure.Configuration.dll | Bin 17560 -> 0 bytes .../Microsoft.WindowsAzure.Diagnostics.dll | Bin 323320 -> 0 bytes .../Microsoft.WindowsAzure.Diagnostics.xml | 2221 --- .../Microsoft.WindowsAzure.StorageClient.dll | Bin 361984 -> 0 bytes .../Microsoft.WindowsAzure.StorageClient.xml | 13895 ---------------- .../bin/RedisPkgBin/RedisServer.dll | Bin 6144 -> 0 bytes msvs/RedisWAInst/bin/RedisPkgBin/startup.cmd | 2 - .../AddRedisConfigOptions.cs | 52 - .../Properties/AssemblyInfo.cs | 58 - .../RedisDeployCmdlets.csproj | 83 - .../RedisDeployCmdlets.psd1 | Bin 4974 -> 0 bytes .../src/RedisInstWA/DownloadHelper.cs | 120 - .../RedisWAInst/src/RedisInstWA/ExtractZip.cs | 133 - .../src/RedisInstWA/FolderHelper.cs | 96 - msvs/RedisWAInst/src/RedisInstWA/InstWaXml.cs | 342 - .../src/RedisInstWA/ParseConfig.cs | 99 - msvs/RedisWAInst/src/RedisInstWA/Program.cs | 514 - .../RedisInstWA/Properties/AssemblyInfo.cs | 36 - .../src/RedisInstWA/RedisInstWA.csproj | 87 - .../src/RedisInstWA/RedisInstance.cs | 41 - msvs/RedisWAInst/src/RedisServer/Program.cs | 138 - .../RedisServer/Properties/AssemblyInfo.cs | 36 - .../src/RedisServer/RedisServer.csproj | 129 - .../RedisWAInst/src/RedisServer/WorkerRole.cs | 88 - msvs/RedisWAInst/src/RedisServer/app.config | 13 - msvs/RedisWAInst/src/RedisServer/startup.cmd | 2 - msvs/RedisWAInst/src/RedisWAInst.sln | 54 - msvs/install/ReadMe.txt | 16 - msvs/install/Redis32.wxs | 154 - msvs/install/Redis64.wxs | 158 - msvs/install/RedisInstall.sln | 39 - msvs/install/RedisInstall32.wixproj | 46 - msvs/install/RedisInstall64.wixproj | 54 - 45 files changed, 19455 deletions(-) delete mode 100644 msvs/RedisWAInst/README.md delete mode 100644 msvs/RedisWAInst/Samples/ServiceConfiguration.Cloud.cscfg delete mode 100644 msvs/RedisWAInst/Samples/ServiceConfiguration.Local.cscfg delete mode 100644 msvs/RedisWAInst/Samples/ServiceDefinition.csdef delete mode 100644 msvs/RedisWAInst/Samples/redis.conf delete mode 100644 msvs/RedisWAInst/bin/Inst4WA/Azure.publishsettings delete mode 100644 msvs/RedisWAInst/bin/Inst4WA/DeployCmdlets4WA.dll delete mode 100644 msvs/RedisWAInst/bin/Inst4WA/Inst4WA.exe delete mode 100644 msvs/RedisWAInst/bin/Inst4WA/remote-setup.ps1 delete mode 100644 msvs/RedisWAInst/bin/RedisDeployCmdlets.dll delete mode 100644 msvs/RedisWAInst/bin/RedisDeployCmdlets.psd1 delete mode 100644 msvs/RedisWAInst/bin/RedisInstWA.exe delete mode 100644 msvs/RedisWAInst/bin/RedisPkgBin/Microsoft.WindowsAzure.Configuration.dll delete mode 100644 msvs/RedisWAInst/bin/RedisPkgBin/Microsoft.WindowsAzure.Diagnostics.dll delete mode 100644 msvs/RedisWAInst/bin/RedisPkgBin/Microsoft.WindowsAzure.Diagnostics.xml delete mode 100644 msvs/RedisWAInst/bin/RedisPkgBin/Microsoft.WindowsAzure.StorageClient.dll delete mode 100644 msvs/RedisWAInst/bin/RedisPkgBin/Microsoft.WindowsAzure.StorageClient.xml delete mode 100644 msvs/RedisWAInst/bin/RedisPkgBin/RedisServer.dll delete mode 100644 msvs/RedisWAInst/bin/RedisPkgBin/startup.cmd delete mode 100644 msvs/RedisWAInst/src/RedisDeployCmdlets/AddRedisConfigOptions.cs delete mode 100644 msvs/RedisWAInst/src/RedisDeployCmdlets/Properties/AssemblyInfo.cs delete mode 100644 msvs/RedisWAInst/src/RedisDeployCmdlets/RedisDeployCmdlets.csproj delete mode 100644 msvs/RedisWAInst/src/RedisDeployCmdlets/RedisDeployCmdlets.psd1 delete mode 100644 msvs/RedisWAInst/src/RedisInstWA/DownloadHelper.cs delete mode 100644 msvs/RedisWAInst/src/RedisInstWA/ExtractZip.cs delete mode 100644 msvs/RedisWAInst/src/RedisInstWA/FolderHelper.cs delete mode 100644 msvs/RedisWAInst/src/RedisInstWA/InstWaXml.cs delete mode 100644 msvs/RedisWAInst/src/RedisInstWA/ParseConfig.cs delete mode 100644 msvs/RedisWAInst/src/RedisInstWA/Program.cs delete mode 100644 msvs/RedisWAInst/src/RedisInstWA/Properties/AssemblyInfo.cs delete mode 100644 msvs/RedisWAInst/src/RedisInstWA/RedisInstWA.csproj delete mode 100644 msvs/RedisWAInst/src/RedisInstWA/RedisInstance.cs delete mode 100644 msvs/RedisWAInst/src/RedisServer/Program.cs delete mode 100644 msvs/RedisWAInst/src/RedisServer/Properties/AssemblyInfo.cs delete mode 100644 msvs/RedisWAInst/src/RedisServer/RedisServer.csproj delete mode 100644 msvs/RedisWAInst/src/RedisServer/WorkerRole.cs delete mode 100644 msvs/RedisWAInst/src/RedisServer/app.config delete mode 100644 msvs/RedisWAInst/src/RedisServer/startup.cmd delete mode 100644 msvs/RedisWAInst/src/RedisWAInst.sln delete mode 100644 msvs/install/ReadMe.txt delete mode 100644 msvs/install/Redis32.wxs delete mode 100644 msvs/install/Redis64.wxs delete mode 100644 msvs/install/RedisInstall.sln delete mode 100644 msvs/install/RedisInstall32.wixproj delete mode 100644 msvs/install/RedisInstall64.wixproj diff --git a/msvs/RedisWAInst/README.md b/msvs/RedisWAInst/README.md deleted file mode 100644 index 3c682926..00000000 --- a/msvs/RedisWAInst/README.md +++ /dev/null @@ -1,86 +0,0 @@ -Deploying Redis to Windows Azure -================================ - -1. Prepare the ServiceConfiguration.cloud.cscfg, ServiceConfiguration.Local.cscfg and ServiceDefinition.csdef files for the Redis worker roles you want to deploy. The RedisWR\Samples folder has examples you can use as a starting point. -2. Prepare a redis.conf file with the common Redis configuration settings that you wish to deploy. The same redis.conf is used as a base for the master and slave roles. The port numbers are automatically appended to each deployed redis.conf instance based on the cscfg file settings. -3. From the bin folder, run the RedisInstWA command in a command Window running as an elevated Administrator. This application prepares the installation configuration and the files to deploy, and then uses Inst4WA to do the deployment. -4. Inst4WA may install Azure SDK components it needs to run. If prompted to allow the installation please accept. -5. When deploying to Azure, if a publishsettings file is not provided then the default browser is used to download a publishsettings file for your account. You will need to sign in with your Azure account credentials. If you see a prompt in your browser to open or save the downloaded file, choose to save it. If you already have a publishsettings file with your credentials, copy it to the same folder as the ServiceDefinition.csdef file and it will be used. Alternatively you can provide a full path on the command line using a pass-through parameter. - -RedisInstWA command line ------------------------- - -RedisInstWA -Source <path to redis exe or URL to ZIP> -Config <path to cscfg file folder> -RedisConf <path to redis.conf file folder> -Domain <Azure domain> -Subscription <Azure subscription> [-X64] [--Pass <other parameters>] - -If deploying to the Azure emulator, then use -Emu in place of -Domain and -Subscription. -Note that the Source may be to local Redis exe files, or may reference a GitHub zip file. If using a zip file, the 32 bit binaries are used by default. To use the 64 bit binaries include the optional -X64 parameter. - -For example: -Source https://github.com/MSOpenTech/redis/archive/2.4.zip will download the zip file for the latest code for branch 2.4. - -The --Pass (note the double '-') parameter is optional. Any parameters following this are passed on to Inst4WA. This is useful to override settings such as region or slot. See the Pass-through parameters section. - -### Deployment notes -If deploying to the Azure emulator, you will need to manually remove the deployment after you have finished testing. You should also remove a previous deployment before trying to deploy a second time. -After downloading files, you may have to unblock the DLLs to enable them to be used. Please follow instructions at [http://msdn.microsoft.com/en-us/library/ee890038(VS.100).aspx](http://msdn.microsoft.com/en-us/library/ee890038(VS.100).aspx) - -### Pass-through parameters -* StorageAccountName - default DomainName + 'stg' -* DeploymentName - default DomainName + 'deploy' -* Region - default 'West US' -* DeploymentOption - default 'Production' -* PublishSettingsFilePath - default is any file in –Config folder with publishsettings extension. - -Configuring the deployment --------------------------- -ServiceDefinition.csdef defines the roles to be deployed. - -- Port numbers to use are defined here for each role. -- You also set the VMSize for each role. -- The sample defines a Startup task that runs startup.cmd. This opens the firewall ports for redis-server.exe. You should follow the sample if you create your own csdef file. - -The cscfg file contains settings used by the Azure roles. - -- The osFamily attribute in the samples is set to "1" for Win2K8R2. You can change this to use a different OS. - -To enable RDP to the Azure roles, you need to define the certificates that you will use for RDP to Azure in the cscfg file. To define the certificate, add an XML element under each Role that specifies the thumbprint for the certificate you are using. -For example: - -> -> … -> -> thumbprint="2CF79A6E4B88031BB3C70B3A6A26D86F2F687111" -> thumbprintAlgorithm="sha1" /> -> -> -> - - -Implementation detail ---------------------- -RedisInstWA creates a folder in the current working directory called RedisInstWork. All the files necessary for deployment are copied here. - -It makes a copy of the redis exe files to deploy in the release sub folder. It copies the redis.conf file here. It also creates an XmlConfig.xml file that is used as input by the Inst4WA application. - -Once this is done, it launches Inst4WA. Inst4WA uses the XmlConfig.xml file as input to pass parameters to Powershell cmdlets for doing the Azure deployment. You can view this xml file to view the parameters passed to the cmdlets. This may be useful in determining if you want to use pass-through parameters. - -The subfolder DeployRedis is used by the installer to create the package to be sent to Azure. - -Troubleshooting ---------------- -The installer may fail for several reasons. Each step in the installation produces text output in the command window to help you understand where it failed. - -If there was a failure coming from Azure, the text message may not contain the information that you need to understand why it failed. - -In this case you should inspect the operation logs using the Azure portal. In the portal page select the settings tab on the left. From there select the operational logs on the top. You may need to scroll to find the most recent logs. Click on the relevant log entry to view the failure message. - -Building the sources --------------------- -To build the sources load the RedisWaInst solution in Visual Studio 2010, select the Release configuration and Build. - -Binaries will be placed in a folder called RedisInstBin. The binaries in the bin folder will not be replaced. If you need to modify the bin folder executables, copy the updated binaries from src\RedisInstBin. - -Acknowledgements ----------------- -The Inst4WA binaries were obtained from [https://github.com/MSOpenTech/inst4wa](https://github.com/MSOpenTech/inst4wa). - diff --git a/msvs/RedisWAInst/Samples/ServiceConfiguration.Cloud.cscfg b/msvs/RedisWAInst/Samples/ServiceConfiguration.Cloud.cscfg deleted file mode 100644 index 53d4fdc5..00000000 --- a/msvs/RedisWAInst/Samples/ServiceConfiguration.Cloud.cscfg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/msvs/RedisWAInst/Samples/ServiceConfiguration.Local.cscfg b/msvs/RedisWAInst/Samples/ServiceConfiguration.Local.cscfg deleted file mode 100644 index e0ab54b2..00000000 --- a/msvs/RedisWAInst/Samples/ServiceConfiguration.Local.cscfg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/msvs/RedisWAInst/Samples/ServiceDefinition.csdef b/msvs/RedisWAInst/Samples/ServiceDefinition.csdef deleted file mode 100644 index 2d372dd3..00000000 --- a/msvs/RedisWAInst/Samples/ServiceDefinition.csdef +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/msvs/RedisWAInst/Samples/redis.conf b/msvs/RedisWAInst/Samples/redis.conf deleted file mode 100644 index 2fabeac4..00000000 --- a/msvs/RedisWAInst/Samples/redis.conf +++ /dev/null @@ -1,418 +0,0 @@ -# Redis configuration file example - -# Note on units: when memory size is needed, it is possible to specifiy -# it in the usual form of 1k 5GB 4M and so forth: -# -# 1k => 1000 bytes -# 1kb => 1024 bytes -# 1m => 1000000 bytes -# 1mb => 1024*1024 bytes -# 1g => 1000000000 bytes -# 1gb => 1024*1024*1024 bytes -# -# units are case insensitive so 1GB 1Gb 1gB are all the same. - -# By default Redis does not run as a daemon. Use 'yes' if you need it. -# Note that Redis will write a pid file in /var/run/redis.pid when daemonized. -daemonize no - -# When running daemonized, Redis writes a pid file in /var/run/redis.pid by -# default. You can specify a custom pid file location here. -pidfile /var/run/redis.pid - -# Accept connections on the specified port, default is 6379. -# If port 0 is specified Redis will not listen on a TCP socket. -#port 6179 - -# If you want you can bind a single interface, if the bind option is not -# specified all the interfaces will listen for incoming connections. -# -# bind 127.0.0.1 - -# Specify the path for the unix socket that will be used to listen for -# incoming connections. There is no default, so Redis will not listen -# on a unix socket when not specified. -# -# unixsocket /tmp/redis.sock -# unixsocketperm 755 - -# Close the connection after a client is idle for N seconds (0 to disable) -timeout 0 - -# Set server verbosity to 'debug' -# it can be one of: -# debug (a lot of information, useful for development/testing) -# verbose (many rarely useful info, but not a mess like the debug level) -# notice (moderately verbose, what you want in production probably) -# warning (only very important / critical messages are logged) -loglevel verbose - -# Specify the log file name. Also 'stdout' can be used to force -# Redis to log on the standard output. Note that if you use standard -# output for logging but daemonize, logs will be sent to /dev/null -logfile stdout - -# To enable logging to the system logger, just set 'syslog-enabled' to yes, -# and optionally update the other syslog parameters to suit your needs. -# syslog-enabled no - -# Specify the syslog identity. -# syslog-ident redis - -# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7. -# syslog-facility local0 - -# Set the number of databases. The default database is DB 0, you can select -# a different one on a per-connection basis using SELECT where -# dbid is a number between 0 and 'databases'-1 -databases 16 - -################################ SNAPSHOTTING ################################# -# -# Save the DB on disk: -# -# save -# -# Will save the DB if both the given number of seconds and the given -# number of write operations against the DB occurred. -# -# In the example below the behaviour will be to save: -# after 900 sec (15 min) if at least 1 key changed -# after 300 sec (5 min) if at least 10 keys changed -# after 60 sec if at least 10000 keys changed -# -# Note: you can disable saving at all commenting all the "save" lines. - -save 900 1 -save 300 10 -save 60 10000 - -# Compress string objects using LZF when dump .rdb databases? -# For default that's set to 'yes' as it's almost always a win. -# If you want to save some CPU in the saving child set it to 'no' but -# the dataset will likely be bigger if you have compressible values or keys. -rdbcompression yes - -# The filename where to dump the DB -dbfilename dump.rdb - -# The working directory. -# -# The DB will be written inside this directory, with the filename specified -# above using the 'dbfilename' configuration directive. -# -# Also the Append Only File will be created inside this directory. -# -# Note that you must specify a directory here, not a file name. -dir ./ - -################################# REPLICATION ################################# - -# Master-Slave replication. Use slaveof to make a Redis instance a copy of -# another Redis server. Note that the configuration is local to the slave -# so for example it is possible to configure the slave to save the DB with a -# different interval, or to listen to another port, and so on. -# -# slaveof - -# If the master is password protected (using the "requirepass" configuration -# directive below) it is possible to tell the slave to authenticate before -# starting the replication synchronization process, otherwise the master will -# refuse the slave request. -# -# masterauth - -# When a slave lost the connection with the master, or when the replication -# is still in progress, the slave can act in two different ways: -# -# 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will -# still reply to client requests, possibly with out of data data, or the -# data set may just be empty if this is the first synchronization. -# -# 2) if slave-serve-stale data is set to 'no' the slave will reply with -# an error "SYNC with master in progress" to all the kind of commands -# but to INFO and SLAVEOF. -# -slave-serve-stale-data yes - -# Slaves send PINGs to server in a predefined interval. It's possible to change -# this interval with the repl_ping_slave_period option. The default value is 10 -# seconds. -# -# repl-ping-slave-period 10 - -# The following option sets a timeout for both Bulk transfer I/O timeout and -# master data or ping response timeout. The default value is 60 seconds. -# -# It is important to make sure that this value is greater than the value -# specified for repl-ping-slave-period otherwise a timeout will be detected -# every time there is low traffic between the master and the slave. -# -# repl-timeout 60 - -################################## SECURITY ################################### - -# Require clients to issue AUTH before processing any other -# commands. This might be useful in environments in which you do not trust -# others with access to the host running redis-server. -# -# This should stay commented out for backward compatibility and because most -# people do not need auth (e.g. they run their own servers). -# -# Warning: since Redis is pretty fast an outside user can try up to -# 150k passwords per second against a good box. This means that you should -# use a very strong password otherwise it will be very easy to break. -# -# requirepass foobared - -# Command renaming. -# -# It is possilbe to change the name of dangerous commands in a shared -# environment. For instance the CONFIG command may be renamed into something -# of hard to guess so that it will be still available for internal-use -# tools but not available for general clients. -# -# Example: -# -# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 -# -# It is also possilbe to completely kill a command renaming it into -# an empty string: -# -# rename-command CONFIG "" - -################################### LIMITS #################################### - -# Set the max number of connected clients at the same time. By default there -# is no limit, and it's up to the number of file descriptors the Redis process -# is able to open. The special value '0' means no limits. -# Once the limit is reached Redis will close all the new connections sending -# an error 'max number of clients reached'. -# -# maxclients 128 - -# Don't use more memory than the specified amount of bytes. -# When the memory limit is reached Redis will try to remove keys -# accordingly to the eviction policy selected (see maxmemmory-policy). -# -# If Redis can't remove keys according to the policy, or if the policy is -# set to 'noeviction', Redis will start to reply with errors to commands -# that would use more memory, like SET, LPUSH, and so on, and will continue -# to reply to read-only commands like GET. -# -# This option is usually useful when using Redis as an LRU cache, or to set -# an hard memory limit for an instance (using the 'noeviction' policy). -# -# WARNING: If you have slaves attached to an instance with maxmemory on, -# the size of the output buffers needed to feed the slaves are subtracted -# from the used memory count, so that network problems / resyncs will -# not trigger a loop where keys are evicted, and in turn the output -# buffer of slaves is full with DELs of keys evicted triggering the deletion -# of more keys, and so forth until the database is completely emptied. -# -# In short... if you have slaves attached it is suggested that you set a lower -# limit for maxmemory so that there is some free RAM on the system for slave -# output buffers (but this is not needed if the policy is 'noeviction'). -# -# maxmemory - -# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory -# is reached? You can select among five behavior: -# -# volatile-lru -> remove the key with an expire set using an LRU algorithm -# allkeys-lru -> remove any key accordingly to the LRU algorithm -# volatile-random -> remove a random key with an expire set -# allkeys->random -> remove a random key, any key -# volatile-ttl -> remove the key with the nearest expire time (minor TTL) -# noeviction -> don't expire at all, just return an error on write operations -# -# Note: with all the kind of policies, Redis will return an error on write -# operations, when there are not suitable keys for eviction. -# -# At the date of writing this commands are: set setnx setex append -# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd -# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby -# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby -# getset mset msetnx exec sort -# -# The default is: -# -# maxmemory-policy volatile-lru - -# LRU and minimal TTL algorithms are not precise algorithms but approximated -# algorithms (in order to save memory), so you can select as well the sample -# size to check. For instance for default Redis will check three keys and -# pick the one that was used less recently, you can change the sample size -# using the following configuration directive. -# -# maxmemory-samples 3 - -############################## APPEND ONLY MODE ############################### - -# By default Redis asynchronously dumps the dataset on disk. If you can live -# with the idea that the latest records will be lost if something like a crash -# happens this is the preferred way to run Redis. If instead you care a lot -# about your data and don't want to that a single record can get lost you should -# enable the append only mode: when this mode is enabled Redis will append -# every write operation received in the file appendonly.aof. This file will -# be read on startup in order to rebuild the full dataset in memory. -# -# Note that you can have both the async dumps and the append only file if you -# like (you have to comment the "save" statements above to disable the dumps). -# Still if append only mode is enabled Redis will load the data from the -# log file at startup ignoring the dump.rdb file. -# -# IMPORTANT: Check the BGREWRITEAOF to check how to rewrite the append -# log file in background when it gets too big. - -appendonly no - -# The name of the append only file (default: "appendonly.aof") -# appendfilename appendonly.aof - -# The fsync() call tells the Operating System to actually write data on disk -# instead to wait for more data in the output buffer. Some OS will really flush -# data on disk, some other OS will just try to do it ASAP. -# -# Redis supports three different modes: -# -# no: don't fsync, just let the OS flush the data when it wants. Faster. -# always: fsync after every write to the append only log . Slow, Safest. -# everysec: fsync only if one second passed since the last fsync. Compromise. -# -# The default is "everysec" that's usually the right compromise between -# speed and data safety. It's up to you to understand if you can relax this to -# "no" that will will let the operating system flush the output buffer when -# it wants, for better performances (but if you can live with the idea of -# some data loss consider the default persistence mode that's snapshotting), -# or on the contrary, use "always" that's very slow but a bit safer than -# everysec. -# -# If unsure, use "everysec". - -# appendfsync always -appendfsync everysec -# appendfsync no - -# When the AOF fsync policy is set to always or everysec, and a background -# saving process (a background save or AOF log background rewriting) is -# performing a lot of I/O against the disk, in some Linux configurations -# Redis may block too long on the fsync() call. Note that there is no fix for -# this currently, as even performing fsync in a different thread will block -# our synchronous write(2) call. -# -# In order to mitigate this problem it's possible to use the following option -# that will prevent fsync() from being called in the main process while a -# BGSAVE or BGREWRITEAOF is in progress. -# -# This means that while another child is saving the durability of Redis is -# the same as "appendfsync none", that in pratical terms means that it is -# possible to lost up to 30 seconds of log in the worst scenario (with the -# default Linux settings). -# -# If you have latency problems turn this to "yes". Otherwise leave it as -# "no" that is the safest pick from the point of view of durability. -no-appendfsync-on-rewrite no - -# Automatic rewrite of the append only file. -# Redis is able to automatically rewrite the log file implicitly calling -# BGREWRITEAOF when the AOF log size will growth by the specified percentage. -# -# This is how it works: Redis remembers the size of the AOF file after the -# latest rewrite (or if no rewrite happened since the restart, the size of -# the AOF at startup is used). -# -# This base size is compared to the current size. If the current size is -# bigger than the specified percentage, the rewrite is triggered. Also -# you need to specify a minimal size for the AOF file to be rewritten, this -# is useful to avoid rewriting the AOF file even if the percentage increase -# is reached but it is still pretty small. -# -# Specify a precentage of zero in order to disable the automatic AOF -# rewrite feature. - -auto-aof-rewrite-percentage 100 -auto-aof-rewrite-min-size 64mb - -################################## SLOW LOG ################################### - -# The Redis Slow Log is a system to log queries that exceeded a specified -# execution time. The execution time does not include the I/O operations -# like talking with the client, sending the reply and so forth, -# but just the time needed to actually execute the command (this is the only -# stage of command execution where the thread is blocked and can not serve -# other requests in the meantime). -# -# You can configure the slow log with two parameters: one tells Redis -# what is the execution time, in microseconds, to exceed in order for the -# command to get logged, and the other parameter is the length of the -# slow log. When a new command is logged the oldest one is removed from the -# queue of logged commands. - -# The following time is expressed in microseconds, so 1000000 is equivalent -# to one second. Note that a negative number disables the slow log, while -# a value of zero forces the logging of every command. -slowlog-log-slower-than 10000 - -# There is no limit to this length. Just be aware that it will consume memory. -# You can reclaim memory used by the slow log with SLOWLOG RESET. -slowlog-max-len 1024 - -############################### ADVANCED CONFIG ############################### - -# Hashes are encoded in a special way (much more memory efficient) when they -# have at max a given numer of elements, and the biggest element does not -# exceed a given threshold. You can configure this limits with the following -# configuration directives. -hash-max-zipmap-entries 512 -hash-max-zipmap-value 64 - -# Similarly to hashes, small lists are also encoded in a special way in order -# to save a lot of space. The special representation is only used when -# you are under the following limits: -list-max-ziplist-entries 512 -list-max-ziplist-value 64 - -# Sets have a special encoding in just one case: when a set is composed -# of just strings that happens to be integers in radix 10 in the range -# of 64 bit signed integers. -# The following configuration setting sets the limit in the size of the -# set in order to use this special memory saving encoding. -set-max-intset-entries 512 - -# Similarly to hashes and lists, sorted sets are also specially encoded in -# order to save a lot of space. This encoding is only used when the length and -# elements of a sorted set are below the following limits: -zset-max-ziplist-entries 128 -zset-max-ziplist-value 64 - -# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in -# order to help rehashing the main Redis hash table (the one mapping top-level -# keys to values). The hash table implementation redis uses (see dict.c) -# performs a lazy rehashing: the more operation you run into an hash table -# that is rhashing, the more rehashing "steps" are performed, so if the -# server is idle the rehashing is never complete and some more memory is used -# by the hash table. -# -# The default is to use this millisecond 10 times every second in order to -# active rehashing the main dictionaries, freeing memory when possible. -# -# If unsure: -# use "activerehashing no" if you have hard latency requirements and it is -# not a good thing in your environment that Redis can reply form time to time -# to queries with 2 milliseconds delay. -# -# use "activerehashing yes" if you don't have such hard requirements but -# want to free memory asap when possible. -activerehashing yes - -################################## INCLUDES ################################### - -# Include one or more other config files here. This is useful if you -# have a standard template that goes to all redis server but also need -# to customize a few per-server settings. Include files can include -# other files, so use this wisely. -# -# include /path/to/local.conf -# include /path/to/other.conf - diff --git a/msvs/RedisWAInst/bin/Inst4WA/Azure.publishsettings b/msvs/RedisWAInst/bin/Inst4WA/Azure.publishsettings deleted file mode 100644 index 5dd3f91d..00000000 --- a/msvs/RedisWAInst/bin/Inst4WA/Azure.publishsettings +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/msvs/RedisWAInst/bin/Inst4WA/DeployCmdlets4WA.dll b/msvs/RedisWAInst/bin/Inst4WA/DeployCmdlets4WA.dll deleted file mode 100644 index 6b850ef2d04e8454aab09e0fc1de5c43951852ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159232 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 BE`$I8 diff --git a/msvs/RedisWAInst/bin/Inst4WA/remote-setup.ps1 b/msvs/RedisWAInst/bin/Inst4WA/remote-setup.ps1 deleted file mode 100644 index 2de76ca3..00000000 --- a/msvs/RedisWAInst/bin/Inst4WA/remote-setup.ps1 +++ /dev/null @@ -1,139 +0,0 @@ -<# - Copyright © Microsoft Open Technologies, Inc. - All Rights Reserved - Apache 2.0 License - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. -#> - -Add-Type -AssemblyName System.ServiceModel.Web, System.Runtime.Serialization -$remotesetup1file = $args[0] -$mylocation = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Path) -Set-Location $mylocation - -function logStatus { - param ($message) - Write-Host "info: $message" -foregroundcolor "yellow" -} - -function logStatus2 { - param ($message) - Write-Host "info: $message" -foregroundcolor "blue" -} - -function logErr { - param ($message) - Write-Host "error: $message" -foregroundcolor "red" -} - -function logSuccess { - param ($message) - Write-Host "info: $message" -foregroundcolor "green" -} - -function logInput { - param ($message) - Write-Host "input: $message" -foregroundcolor "magenta" -} - -<# - Display the usage -#> -function showUsageAndExit() { - Write-Host "`r`nUSAGE: remote-setup.ps1 `r`n" -foregroundcolor "green" - exit 1 -} - -# Gets the commandline arguments -if($args.Count -ne 4) -{ - logErr "Missing required arguments`r`n" - showUsageAndExit -} - - -<# - Reads the configuration file config.json -#> -function get-Config([string]$service, [string]$adminPassword, [string]$winrmEpName) -{ - - [hashtable]$result = @{} - $result.dnsPrefix = $service - $result.dns = $service + ".cloudapp.net" - $result.user = "Administrator" - $result.password = $adminPassword - - $result.ports = @(); - $result.ips = @(); - - - $vmDetails = @(Get-AzureVM -ServiceName $service | select-object *) - if($vmDetails.length -le 0) - { - Throw "Unable to get VM details." - } - - $endpointSearchCriteria = "*" + $winrmEpName + "*" - - foreach($eachVmDetail in $vmDetails) - { - $endpoints = @(Get-AzureVM -ServiceName $service -name $eachVmDetail.Name | Get-AzureEndPoint | where-object {$_.Name -like $endpointSearchCriteria }) - $result.ports += $endpoints[0].Port - $result.ips += $eachVmDetail.IpAddress - } - - return $result; - -} - -logStatus "Reading the configuration file.." -$result = get-Config $args[1] $args[2] $args[3] -logStatus ("DNS: " + $result.Get_Item("dns")) -logStatus ("VM IP Addresses:" + $result.Get_Item("ips")) -$secpasswd = ConvertTo-SecureString $result.Get_Item("password") -AsPlainText -Force -$cred = New-Object System.Management.Automation.PSCredential ($result.Get_Item("user"), $secpasswd) -# After VM's are in ready state it takes some time to reach the VM in a state in which -# it can accept the request, so waiting for 30 seconds -Start-Sleep -s 30 -# Runs the remote setup script in each VM, do retry if the connection fails. -foreach ($port in $result.Get_Item("ports")) { - logStatus ("Running setup on " + $result.Get_Item("dns") + ":" + $port) - $retry = 0; - do { - $success = $false; - try - { - Invoke-Command -ComputerName $result.Get_Item("dns") -Port $port -Credential $cred -FilePath $args[0] -ArgumentList ($result.Get_Item("ips")) -ErrorAction Stop - $success = $true - } - catch [Exception] - { - If ($_.Exception -is [System.Management.Automation.Remoting.PSRemotingTransportException]) { - if ($retry -ge 10) { - $_.Exception.GetType().FullName - logErr ("Connection to WinRM service running on $port failed after $retry retry, moving to next VM") - break - } else { - logStatus2 ("Connection to WinRM service running on $port failed.. Retrying#" + $retry) - Start-Sleep -s (20 + $retry*5) - $retry++; - } - } Else { - throw $_.Exception - } - } - } while (!$success); -} diff --git a/msvs/RedisWAInst/bin/RedisDeployCmdlets.dll b/msvs/RedisWAInst/bin/RedisDeployCmdlets.dll deleted file mode 100644 index a8c991b73738e89647b3c9551b89ebce2ad547a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6144 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 diff --git a/msvs/RedisWAInst/bin/RedisDeployCmdlets.psd1 b/msvs/RedisWAInst/bin/RedisDeployCmdlets.psd1 deleted file mode 100644 index 34dd8769a3cc4eade56baa9c4a823f30dbb08ab2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4974 zcmchbU2hvj6o$`jkoXTP^&%+((}eI*q)N4#rc^3b)rP_aHyg(`7Pi+oZqtJJ>%jBQ z$z*oC8)G|ZWvx9sALqR1`;7nn=Z<}9pV%EM>_@BY%--18`n*l7w5g43z}vYkm>IA> z4=eS3yPO+YkClpj6}uMJv7ecnLank3X1n$$bmvg&uv>IX8}c^cnX-TP5<^7tB+U0Y zQL@^HPGP6^-oEEIr(D!%7xp6X)45mn8|TJ+3Oiv`!po_z;!%M{JifLs?ZCbY-}h{v zaXPEfL;EYtL|U(c{3DwMJxxH7^yoS}4f-fS_8$8Ajsa_~^AcT2hdpMJ_S)6D57k z{yD27PE4UU#jX=yZrMH z=4EN=bp&SjDEX~s+ObHQC-##$UFSRC>^`UNWBo%$Utoa)#sfx&P`!^PHFpTQgD_XJ zrnm3#l!1NAbIRks9QD-&oiMl;tkRE8tPatNvWjwx`+CdgrXQ4!gT}mGVbIt0+-nk8S#irM{+rjGLCm*h3%m+Nzk{?!SxGu?3*y^g8Gc{VR(B=9@Ka{>`g@7 zYw@(lN$Mb!eN_=uEz|+2AJ9nMhiboSo@ADs$~ww(-YMvm_6*6g75kNK3udMv%PQMW zgQc|J^RKeD>ZG5q(-zfXSZV8WR6Acnxt{;(Jx}bz9-{rbSr6Go8r2nbQ>q23BCF(; zBqegXtg0EeiMbt(EYw7vcfYZl75Y80^$a=ogZCuc$tP2sxTRcH&Gv$Q)Dh3At)lax zELBH-PCjbynVS-yP^V`>f_7=&Va4&K%<5F#LvxE=1fNt7y_t7K-kab(4&JOAo&5Xb zW3Kbx1ov{}G^4RVCV7amn6iOKgEDixfoV1G3+k)tKV?bXxTKeqIr95((>E09syLDB zGS&ySgZJL-wsjopNa_+Li|e3o@2;|)EUFx)ZtnVyxk*bhJR6%ag2=0`H6!^koTE8MAJ@IFV$I$sNa5f mEQoiFN@QN(*RBiy-^1Ty4^Y?H&7wa?aCF6gxsUn#3ip4bKRRFl diff --git a/msvs/RedisWAInst/bin/RedisInstWA.exe b/msvs/RedisWAInst/bin/RedisInstWA.exe deleted file mode 100644 index f9a5961c96c463c436a303e80d02f0c93b90d1ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58880 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 diff --git a/msvs/RedisWAInst/bin/RedisPkgBin/Microsoft.WindowsAzure.Diagnostics.dll b/msvs/RedisWAInst/bin/RedisPkgBin/Microsoft.WindowsAzure.Diagnostics.dll deleted file mode 100644 index 665da2a0d7fa9845be7a169564eb3e1e452b4f9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323320 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Ⓢ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 - - - Microsoft.WindowsAzure.Diagnostics - - - -

- Provides access to common SDK constants. - - - - - The version to display in the command line tools banners. - - - - - Path to the SDK installation registry key. - - - - - Name of the registry value that contains the SDK installation path. - - - - - Name of the registry value that contains the SDK version string. - - - - - The version to display in the command line tools banners. - - - - - The GUID of the ETW log to use for Azure infrastructure logging. - - - - - Environment variable read by hosts to enable partial trust. - - - - - Environment variable for Agent RPC Endpoint. - - - - - String environment variable that defines the module name for system plugin tasks. - It is required to differenciate user startup task and system startup task. - - - - - Boolean environment variable that causes IISConfigurator to delete existing sites. - - - - - Boolean environment variable that causes IISConfigurator to configure URL rewrite. - - - - - Configurable operation timeout for IISConfigurator client connection through WCF. - This is in terms of minutes. - - - - - The name of the environment variable that contains the role type. - - - - - The role type value indicating a worker role. - - - - - The role type value indicating a web role hosted in HWC. - - - - - The role type value indicating a web role hosted in IIS. - - - - - Base path to SDK runtime endpoint discovery (no version specified). - - - - - Path to SDK runtime endpoint discovery. - - - - - Name of the runtime endpoint value. - - - - - Name of the runtime endpoint value. - - - - - Subject name of generated management certificates. - - - - - Registry key path to storage key path. - - - - - Registry key path to cloud drive devpath. - - - - - Name of the registry value that contains path for the devpath. - - - - - Name of the registry value that contains path for the devpath. - - - - - Name of the event log. - - - - - Name of the event guest agent source. - - - - - Name of the event runtime source. - - - - - The name of the private configuration setting use to determine if code is running under - the devfabric or not. - - - This is shared between the runtime and the devfabric. Do not change this, as it breaks - a contract between the two. - - - - - The name of the private configuration setting use to pass the path to the IIS Express installation root. - - - This is shared between the runtime and the devfabric. Do not change this, as it breaks - a contract between the two. - - - - - Path to a debugger to launch the role host process under. - - - - - Provides extension methods to the class. - - - - - Creates a new instance of the class for the specified deployment. - - A object. - The deployment ID for the current deployment. - A object. - - - - Creates an new instance of the class for the specified deployment, role, - and instance. - - A object. - The deployment ID for the current deployment. - The name of the role in the specified deployment. - The role instance ID. - A object. - - - - Allows sending configuration requests to a ConfigChannelServer. - - - - - Stores the name of the pipe. - - - - - Initializes a new instance of the class. - - Name of the pipe. - - - - Sends the configuration request. - - The config request. - The timeout. - true if the config was sent; otherwise false. - - - - Starts a named pipe server that listens for configuration change events. - - - - - Stores the name of the pipe. - - - - - Stores the server pipe. - - - - - Initializes a new instance of the class. - - Name of the pipe. - - - - Starts a named pipe server. - - - - - Stops the server. - - - - - Raises the event. - - The instance containing the event data. - - - - Handles client connections. - - The async result. - - - - Raised when a new configuration is sent. - - - - - Stores the data required for the ConfigurationRequest event. - - - - - Initializes a new instance of the class. - - The request. - - - - Gets the config request. - - The config request. - - - - Determines if a URI requires path style addressing - - - - - - - Advanced class used to explicitly configure the monitoring agent. - - - - - Creates an inital configuration for the diagnostic monitor. - - - - - Gets or sets the storage account to which logs are transferred. - - - - - Gets or sets the deployment ID of the role instance for which this diagnostic monitor is running. - - - - - Gets or sets the role instance ID. - - - - - Gets or sets the name of the role. - - - - - Gets or sets the name of the local directory where diagnostic monitor state is written. - - - - - Gets or sets the diagnostic monitor tools directory. - - - - - Gets or sets the polling interval for the diagnostic monitor. - - - - - Represents the configuation for performance counter data sources. - - - - - Gets or sets the rate at which to sample the performance counter, rounded up to the nearest second. - - - - - Gets or sets a performance counter specifier using standard Windows counter syntax. - - - See Specifying a Counter Path - for more information on performance counters. - - - - - Class to configure data buffers used to store diagnostic information. - - - - - Gets or sets the interval between scheduled transfers for this data buffer, in minutes. - - - This value is rounded up to the nearest minute. A value of TimeSpan.Zero disables any scheduled - data transfer. - - - - - Gets or sets the maximum amount of file system storage available to the specified data buffer. - - - By default buffer sizes are automatically allocated by Windows Azure. You can set this property - if you need to manage the buffer size explicitly. - - - - - Configuration class for data buffers that contain file-based logs. - - - Represents the configuration for file-based data buffers. - - - - - Gets a list of configured directories for file-based logs. - - - - - Configuation class for data buffers that hold performance counter information. - - - Represents the buffer configuration for performance counters. - - - - - Gets a list of configurations for performance counters that are being collected. - - - - - Configuration class for buffers used to hold information gathered from the Windows event logs. - - - Represents the buffer configuration for Windows event logs. - - - - - Gets a list of configured data sources for Windows event logs. - - - - - Specifies a logging level by which to filter records when performing a scheduled transfer. - - - When this property is set to LogLevel.Undefined, no filter is applied and all logging events at all levels are transferred. - - - - - Represents the configuration for a set of standard fixed data buffers for logging and diagnostic information. - - - - - Gets or sets the interval at which the diagnostic monitor polls for diagnostic configuration changes. - - - - Increasing the rate at which your service polls for configuration changes may affect your - storage costs. For more information, see . - - - Note that the configuration change polling interval cannot be set remotely. - - - - - - Gets or sets the total amount of file system storage allocated for all logging buffers. - - - - - Gets or sets the buffer configuration for basic Windows Azure logs. - - - - - - Gets or sets the buffer configuration for the logs generated by the underlying diagnostics infrastructure. - The diagnostic infrastructure logs are useful for troubleshooting the diagnostics system itself. - - - - - Gets or sets the buffer configuration for performance counter data. - - - - - Gets or sets the buffer configuration for Windows event logs. - - - - - Gets or sets the buffer configuration for file-based logs defined by the developer. - - - - - Represents information about ongoing data transfers from the local logs to a Windows Azure storage account. - - - - - Constructs an OnDemandTransferInfo object from queue messages sent by a diagnostic monitor on completion of an on-demand - transfer. - - The queue message. - An object. - - - - Gets or sets the unique ID for a given transfer request. - - - - - Gets or sets the deployment ID from which the source data is being transferred. - - - - - Gets or sets the name of the role from which the source data is being transferred. - - - - - Gets or sets the ID of the role instance from which the source data is being transferred. - - - - - Gets or sets the name of a queue where a completion message will be enqueued to provide information - about this transfer. - - - If notification of completion is requested, a single message will - be placed in the specified queue to signal completion. - - - - - Enumeration of a standard set of data buffers for logging. - - - - - Basic Windows Azure logs - - - - - Diagnostic infrastructure logs - - - - - Performance counters - - - - - Windows event logs - - - - - File-based logs defined by the developer. - - - IIS logs, Failed Request logs, and application crash dumps are a special case of file-based logs that are automatically - configured for the service. - - - - - Describes the configuration of a directory to which file-based logs are written. - - - IIS logs, Failed Request logs, and application crash dumps are a special case of file-based logs that are automatically - configured for the service. - - - - - Gets or sets the absolute path for the local directory to which file-based logs are being written. - - - - - Gets or sets the name of a container defined in a storage account where the - contents of file-based logs are to be transferred. - - - - A container is a resource defined by the Blob service under which blob data is stored. File-based logs are - copied from the local directory to blobs within this container when a scheduled or on-demand transfer is performed. - - - The Blob service endpoint is determined by the cloud storage account used to initialize the - for the role instance. - - - The directory from which file-based logs are transferred is the directory defined by the property - for this object. - - - - - - Gets or sets the maximum size of the directory defined by the property to which - file-based logs are written. - - - - - Defines a standard set of logging levels. - - - - - Logs all events at all levels. - - - - - Logs a critical alert. - - - - - Logs an error. - - - - - Logs a warning. - - - - - Logs an informational message. - - - - - Logs a verbose message. - - - - - Represents the buffer configuration for basic Windows Azure logs. - - - - - Gets or sets the logging level by which to filter records when performing a scheduled transfer. - - - When this property is set to LogLevel.Undefined, no filter is applied and all logging events at all levels are transferred. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Represents an active instance of a diagnostic monitor. - - - - - Returns the default initial diagnostic monitor configuration for the current role instance. - - A object. - - - Call this method to retrieve the initial configuration for all logging and diagnostic parameters for the current - role instance. Once you retrieve the initial configuration, you can modify configuration parameters and - update the configuration for the current instance. - - - By default, the overall quota for file system storage for all logging buffers is approximately 4 GB. This - storage space is automatically allocated across the various logging buffers in a dynamic fashion. - You can also configure individual buffer quotas if you prefer to manage them yourself. - - - The size of the overall quota for logging buffers is limited by the size of the DiagnosticStore local resource. - To increase the size of the overall quota, first increase the size of the DiagnosticStore resource. - - - - - - Starts a diagnostic monitor. - - The name of a configuration setting that - provides a connection string to a storage account. - - A object. - - - This method starts a diagnostic monitor with the default initial configuration. - Data buffers are written to the storage account indicated by the specified configuration setting. The storage - account may be the well-known development storage account, or a Windows Azure storage account in the cloud. - - - See Configuring Connection Strings for more information - about how to construct a connection string to a storage account. - - - This method also registers for notification of changes to configuration settings. - If the value of the connection string is changed, the diagnostic monitor will be - automatically reconfigured to use the new connection. - - - See Configuring Connection Strings for more information - about how to construct a connection string to a storage account. - - - - - - Starts a diagnostic monitor with a user-defined initial configuration. - - The name of a configuration setting that - provides a connection string to a storage account. - A object that - provides a custom initial configuration. - A object. - - - This method starts a diagnostic monitor with the specified initial configuration. - Data buffers are written to the storage account indicated by the specified configuration setting. The storage - account may be the well-known development storage account, or a Windows Azure storage account in the cloud. - - - This method also registers for notification of changes to configuration settings. - If the value of the connection string is changed, the monitoring agent will be - automatically reconfigured to use the new connection. - - - See Configuring Connection Strings for more information - about how to construct a connection string to a storage account. - - - - - - Starts a diagnostic monitor with a user-defined initial configuration. - - A object. - A object that - provides a custom initial configuration. - - A object. - - - - This method starts a diagnostic monitor with the specified storage account and initial configuration. - Data buffers are written to the specified storage account. - - - This method also registers for notification of changes to configuration settings. - If the value of the connection string is changed, the monitoring agent will be - automatically reconfigured to use the new connection. - - - See Configuring Connection Strings for more information - about how to construct a connection string to a storage account. - - - - - - Updates the storage account information for the current diagnostic monitor. - - A object. - - - - Stops the diagnostic monitor. - - - - - Specifies that the diagnostic monitor may use non-secure (HTTP) connections to - communicate with the storage account. - - - true if [allow insecure remote connections]; otherwise, false. - - - - This property should be set to true only in debugging - scenarios. In a production environment, the default connection used by the diagnostic monitor is secure (HTTPS). - When the diagnostic monitor is configured to use the development storage account, this property is ignored. - - - - - - Gets the local directory where state information for the diagnostic monitor is stored. - - - - - Represents the application crash dumps. - - - - - Enables collection of application crash dumps (mini dumps or full dumps) for this process. - - if set to true [enable full dumps]; if false, collect mini dumps only. - - - When you enable collection of crash dumps with this method, crash dumps are written to the crash dumps - directory (named "CrashDumps") in the default diagnostic store. The default diagnostic store is a local - resource that is automatically configured for the role and is named "DiagnosticStore". - You can retrieve the default diagnostic store by calling the - method. - - - - - - Enables collection of crash dumps (mini dumps or full dumps) for this process to a specified local directory. - - The absolute path to the local directory. - if set to true [enable full dumps]; if false, collect mini dumps only. - - - - Provides a class for managing the configuration of diagnostic monitors remotely. - - - - - Creates a new instance of the class. - - A connection string for a storage account. - The deployment ID. - - - See Configuring Connection Strings for more information - about how to construct a connection string to a storage account. - - - - - - Creates a new instance of the class. - - A object. - The deployment ID. - - - - Lists the set of roles which have successfully started at least one diagnostic monitor. - - A list of role names. - This method does not return a list of all roles in a deployment, but only the roles for which there is currently at least - once instance running a diagnostic monitor. - - - - Returns a list of IDs of active role instances that have a diagnostic monitor running. - - The name of the role. - A list of role instance IDs. - - - - Returns the list of role instance diagnostic managers for the specified role. - - The name of the role. - A list of objects. - - - - Returns the for the specified role instance. - - The name of the role. - The role instance ID. - A object. - - - - Specifies that the deployment diagnostic manager may use non-secure (HTTP) connections to - communicate with the storage account. - - - true if [allow insecure remote connections]; otherwise, false. - - - - This property should be set to true only in debugging - scenarios. In a production environment, the default connection used by the deployment diagnostic manager is secure (HTTPS). - When the deployment diagnostic manager is configured to use the development storage account, this property is ignored. - - - - - - Specifies options for an on-demand transfer. - - - - - Gets or sets the start of the time window for which event data is to be transferred. - - - - - Gets or sets the end of the time window for which event data is to be transferred. - - - - - Gets or sets the filter level for event data that has been logged with level information. - - - If the logging level is set to LogLevel.Undefined, all data is transferred regardless of logging level. - - - - - Gets or sets the name of the queue where transfer completion notification can optionally be sent. - - - - - Class for remotely mananging the configruation and diagnostic data for a given role instnace. - - - - - Initializes a new instance of the class. - - A object. - The deployment ID. - The name of the role. - The role instance ID. - - - - Gets the current diagnostic monitor configuration. - - A object. - - - - Sets the configuration for the diagnostic monitor. - - A object representing the new configuration. - - Setting the current configuration while on-demand transfers are pending results in an error. - - - - - Returns the set of active transfers, with associated transfer information. - - A Dictionary of data buffers and their associated on-demand transfer information. - - - - Begins an on-demand transfer of the specified data buffer. - - The name of the source buffer. - A request ID identifying the transfer. - - - - Begins an on-demand transfer of the specified data buffer. - - The name of the source buffer. - Options for the on-demand transfer. - A request ID identifying the transfer. - - - - Cancel all on-demand transfers that are currently in progress, returning the request ID for each transfer. - - Name of the data buffer. - A list of request IDs for the on-demand transfers that are in progress. - Currently there can be at most one active transfer per data buffer. - - - - Stops an on-demand transfer based on its request ID. - - The request ID. - - A boolean indicating whether the on-demand transfer was stopped. This method - may return false if the there is no active tranfer with the given request ID. - - - - - Specifies that the role instance diagnostic manager may use non-secure (HTTP) connections to - communicate with the storage account. - - - true if [allow insecure remote connections]; otherwise, false. - - - - This property should be set to true only in debugging - scenarios. In a production environment, the default connection used by the role instance diagnostic manager is secure (HTTPS). - When the role instance diagnostic manager is configured to use the development storage account, this property is ignored. - - - - - - Gets the deployment ID of this role instance. - - - - - Gets the name of the role for this role instance. - - - - - Gets the ID of this role instance. - - - - - Represents the trace listener used for basic Windows Azure logs. - - - - - Constructor for the class. - - - - - Releases the unmanaged resources used by the and optionally releases the managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - When overridden in a derived class, writes the specified message to the listener you create in the derived class. - - The message to write. - - - - When overridden in a derived class, writes a message to the listener you create in the derived class, followed by a line terminator. - - A message to write. - - - - Writes trace and event information to the listener specific output. - - A object that contains the current process ID, thread ID, and stack trace information. - A name used to identify the output, typically the name of the application that generated the trace event. - One of the values specifying the type of event that has caused the trace. - A numeric identifier for the event. - - - - - - - - Writes trace information, a message, and event information to the listener specific output. - - A object that contains the current process ID, thread ID, and stack trace information. - A name used to identify the output, typically the name of the application that generated the trace event. - One of the values specifying the type of event that has caused the trace. - A numeric identifier for the event. - A message to write. - - - - - - - - Writes trace information, a formatted array of objects and event information to the listener specific output. - - A object that contains the current process ID, thread ID, and stack trace information. - A name used to identify the output, typically the name of the application that generated the trace event. - One of the values specifying the type of event that has caused the trace. - A numeric identifier for the event. - A format string that contains zero or more format items, which correspond to objects in the array. - An object array containing zero or more objects to format. - - - - - - - - Writes trace information, an array of data objects and event information to the listener specific output. - - A object that contains the current process ID, thread ID, and stack trace information. - A name used to identify the output, typically the name of the application that generated the trace event. - One of the values specifying the type of event that has caused the trace. - A numeric identifier for the event. - An array of objects to emit as data. - - - - - - - - Writes trace information, a data object and event information to the listener specific output. - - A object that contains the current process ID, thread ID, and stack trace information. - A name used to identify the output, typically the name of the application that generated the trace event. - One of the values specifying the type of event that has caused the trace. - A numeric identifier for the event. - The trace data to emit. - - - - - - - - Indicates whether the diagnostic monitor trace listener is thread-safe. - - - - diff --git a/msvs/RedisWAInst/bin/RedisPkgBin/Microsoft.WindowsAzure.StorageClient.dll b/msvs/RedisWAInst/bin/RedisPkgBin/Microsoft.WindowsAzure.StorageClient.dll deleted file mode 100644 index 8ef0edfb8b7d8b1226ee2aec63352925c31c98f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361984 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⁡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 z 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�X}!Sv@Q`51%h-5Q4xiL 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 - - - Microsoft.WindowsAzure.StorageClient - - - - - Represents a Windows Azure storage account. - - - - - The setting name for using the development storage. - - - - - The setting name for specifying a development storage proxy Uri. - - - - - The setting name for using the default storage endpoints with the specified protocol. - - - - - The setting name for the account name. - - - - - The setting name for the account key. - - - - - The setting name for a custom blob storage endpoint. - - - - - The setting name for a custom queue endpoint. - - - - - The setting name for a custom table storage endpoint. - - - - - The setting name for a shared access key. - - - - - The default account name for the development storage. - - - - - The default account key for the development storage. - - - - - The credentials string used to test for the development storage credentials. - - - - - The root blob storage DNS name. - - - - - The root queue DNS name. - - - - - The root table storage DNS name. - - - - - Validator for the UseDevelopmentStorage setting. Must be "true". - - - - - Validator for the DevelopmentStorageProxyUri setting. Must be a valid Uri. - - - - - Validator for the DefaultEndpointsProtocol setting. Must be either "http" or "https". - - - - - Validator for the AccountName setting. No restrictions. - - - - - Validator for the AccountKey setting. Must be a valid base64 string. - - - - - Validator for the BlobEndpoint setting. Must be a valid Uri. - - - - - Validator for the QueueEndpoint setting. Must be a valid Uri. - - - - - Validator for the TableEndpoint setting. Must be a valid Uri. - - - - - Validator for the SharedAccessSignature setting. No restrictions. - - - - - Stores the user-specified configuration setting publisher. - - - - - Singleton instance for the development storage account. - - - - - Initializes a new instance of the class using the specified - account credentials and service endpoints. - - The account credentials. - The Blob service endpoint. - The Queue service endpoint. - The Table service endpoint. - - - - Initializes a new instance of the class using the specified - account credentials and the default service endpoints. - - An object of type that - specifies the account name and account key for the storage account. - True to use HTTPS to connect to storage service endpoints; otherwise, false. - - - - Parses a connection string and returns a created - from the connection string. - - A valid connection string. - Thrown if is null or empty. - Thrown if is not a valid connection string. - Thrown if cannot be parsed. - A object constructed from the values provided in the connection string. - - - - Create a new instance of a object from a specified configuration - setting. This method may be called only after the - method has been called to configure the global configuration setting publisher. - - The name of the configuration setting. - Thrown if the global configuration setting - publisher has not been configured, or if the configuration setting cannot be found. - A constructed from the values in the configuration string. - - - - Indicates whether a connection string can be parsed to return a object. - - The connection string to parse. - A object to hold the instance returned if - the connection string can be parsed. - true if the connection string was successfully parsed; otherwise, false. - - - - Sets the global configuration setting publisher for the storage account, which will be called when - the account access keys are updated in the service configuration file. - - The configuration setting publisher for the storage account. - - - - Returns a connection string for this storage account, without sensitive data. - - A connection string. - - - - Returns a connection string for the storage account, optionally with sensitive data. - - True to include sensitive data in the string; otherwise, false. - A connection string. - - - - Returns a with development storage credentials using the specified proxy Uri. - - The proxy endpoint to use. - The new . - - - - Internal implementation of Parse/TryParse. - - The string to parse. - The to return. - A callback for reporting errors. - If true, the parse was successful. Otherwise, false. - - - - Tokenizes input and stores name/value pairs in a NameValueCollection. - - The string to parse. - Error reporting delegate. - Tokenized collection. - - - - Encapsulates a validation rule for an enumeration based account setting. - - The name of the setting. - A list of valid values for the setting. - An representing the enumeration constraint. - - - - Encapsulates a validation rule using a func. - - The name of the setting. - A func that determines if the value is valid. - An representing the constraint. - - - - Determines whether the specified setting value is a valid base64 string. - - The setting value. - true if the specified setting value is a valid base64 string; otherwise, false. - - - - Validation function that validates Uris. - - Value to validate. - true if the specified setting value is a valid Uri; otherwise, false. - - - - Settings filter that requires all specified settings be present and valid. - - A list of settings that must be present. - The remaining settings or null if the filter's requirement is not satisfied. - - - - Settings filter that removes optional values. - - A list of settings that are optional. - The remaining settings or null if the filter's requirement is not satisfied. - - - - Settings filter that ensures that at least one setting is present. - - A list of settings of which one must be present. - The remaining settings or null if the filter's requirement is not satisfied. - - - - Settings filter that ensures that a valid combination of credentials is present. - - The remaining settings or null if the filter's requirement is not satisfied. - - - - Tests to see if a given list of settings matches a set of filters exactly. - - The settings to check. - A list of filters to check. - - If any filter returns null, false. - If there are any settings left over after all filters are processed, false. - Otherwise true. - - - - - Gets a StorageCredentials object corresponding to whatever credentials are supplied in the given settings. - - The settings to check. - The StorageCredentials object specified in the settings. - - - - Gets the default blob endpoint using specified settings. - - The settings to use. - The default blob endpoint. - - - - Gets the default blob endpoint using the specified protocol and account name. - - The protocol to use. - The name of the storage account. - The default blob endpoint. - - - - Gets the default queue endpoint using the specified settings. - - The settings. - The default queue endpoint. - - - - Gets the default queue endpoint using the specified protocol and account name. - - The protocol to use. - The name of the storage account. - The default queue endpoint. - - - - Gets the default table endpoint using the specified settings. - - The settings. - The default table endpoint. - - - - Gets the default table endpoint using the specified protocol and account name. - - The protocol to use. - The name of the storage account. - The default table endpoint. - - - - Gets a object that references the development storage account. - - A reference to the development storage account. - - - - Gets the endpoint for the Blob service, as configured for the storage account. - - The Blob service endpoint. - - - - Gets the endpoint for the Queue service, as configured for the storage account. - - The Queue service endpoint. - - - - Gets the endpoint for the Table service, as configured for the storage account. - - The Table service endpoint. - - - - Gets the credentials used to create this object. - - The credentials used to create the object. - - - - Encapsulates a mutable storage credentials object. - - - - - Stores the mutable storage credentials. - - - - - Initializes a new instance of the class. - - Name of the configuration setting. - - - - Sets the configuration value. - - The value. - true if the value was set; otherwise, false. - - - - Gets or sets the name of the configuration setting from which we retrieve storage account information. - - - - - Gets or sets the cloud storage account. - - The cloud storage account. - - - - Represents a object that is mutable to support key rotation. - - - - - Represents a set of credentials used to authenticate access to a Windows Azure storage account. - - - - - Transforms a resource URI into a shared access signature URI, by appending a - shared access token. - - The resource URI to be transformed. - The URI for a shared access signature, including the resource URI and the shared access token. - - - - Signs a request using the specified credentials under the Shared Key authentication scheme. - - The web request to be signed. - - - - Signs a request using the specified credentials under the Shared Key Lite authentication scheme. - - The web request to be signed. - - - - Encodes a Shared Key or Shared Key Lite signature string by using the HMAC-SHA256 algorithm over a UTF-8-encoded string-to-sign. - - A UTF-8-encoded string-to-sign. - An HMAC-encoded signature string. - - - - Performs the computation of the signature based on the private key. - - The string to be signed. - The signature for the string. - Need for D-SAS not public. - - - - Returns a that represents this instance. - - If set to true exports secrets. - - A that represents this instance. - - - - - Gets the name of the storage account associated with the specified credentials. - - The name of the account. - - - - Gets a value indicating whether the method should be called - to transform a resource URI to a URI that includes a token for a shared access signature. - - True if the URI must be transformed; otherwise, false. - - - - Gets a value indicating whether a request can be signed under the Shared Key authentication - scheme using the specified credentials. - - True if a request can be signed with these credentials; otherwise, false. - - - - Gets a value indicating whether a request can be signed under the Shared Key Lite authentication - scheme using the specified credentials. - - True if a request can be signed with these credentials; otherwise, false. - - - - Gets a value indicating whether the method will return a valid - HMAC-encoded signature string when called using the specified credentials. - - True if these credentials will yield a valid signature string; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The initial credentials. - - - - Updates the object with new credentials. - - The new credentials. - - - - Computes the HMAC signature of the specified string. - - The string to sign. - The computed signature. - - - - Signs a request using the specified credentials under the Shared Key authentication scheme. - - The request to be signed. - - - - Signs a request using the specified credentials under the Shared Key Lite authentication scheme. - - The request to be signed. - - - - Transforms the Uri. - - The resource Uri. - The transformed Uri. - - - - Computes the 512-bit HMAC signature of the specified string. - - The string to sign. - The computed signature. - - - - Returns a that represents this instance. - - If set to true the string exposes key information. - - A that represents this instance. - - - - - Gets the name of the storage account associated with the specified credentials. - - The account name. - - - - Gets a value indicating whether the method will return a valid - HMAC-encoded signature string when called with the specified credentials. - - - Returns true if these credentials will yield a valid signature string; otherwise, false. - - - - - Gets a value indicating whether a request can be signed under the Shared Key authentication - scheme using the specified credentials. - - - Returns true if a request can be signed with these credentials; otherwise, false. - - - - - Gets a value indicating whether a request can be signed under the Shared Key Lite authentication - scheme using the specified credentials. - - - Returns true if a request can be signed with these credentials; otherwise, false. - - - - - Gets a value indicating whether the method must be called - before generating a signature string with the specified credentials. - - - Returns true if [needs transform Uri]; otherwise, false. If false, - calling returns the original, unmodified Uri. - - - - - Gets or sets the current object that this instance represents. - - - - - Contains helper methods for implementing shared access signatures. - - - - - Get the signature hash embedded inside the Shared Access Signature. - - The shared access policy to hash. - An optional identifier for the policy. - The canonical resource string, unescaped. - The client whose credentials are to be used for signing. - The signed hash. - - - - Get the complete query builder for creating the Shared Access Signature query. - - The shared access policy to hash. - An optional identifier for the policy. - Either "b" for blobs or "c" for containers. - The signature to use. - The finished query builder. - - - - Converts the specified value to either a string representation or . - - The value to convert. - A string representing the specified value. - - - - Converts the specified value to either a string representation or null. - - The value to convert. - A string representing the specified value. - - - - Escapes and adds the specified name/value pair to the query builder if it is not null. - - The builder to add the value to. - The name of the pair. - The value to be escaped. - - - - Parses the query. - - The query parameters. - The credentials. - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to The argument must not be empty string.. - - - - - Looks up a localized string similar to The argument is out of range. - - - - - Looks up a localized string similar to The argument '{0}' is larger than maximum of '{1}'. - - - - - Looks up a localized string similar to The argument '{0}' is smaller than minimum of '{1}'. - - - - - Looks up a localized string similar to Cannot attach to a TableStorageDataServiceContext object. These objects already contain the functionality for accessing the table storage service.. - - - - - Looks up a localized string similar to EncodeMessage should be true for binary message.. - - - - - Looks up a localized string similar to "Versions before 2009-09-19 do not support Shared Key Lite for Blob And Queue, current target version '{0}'". - - - - - Looks up a localized string similar to Cannot change size below currently written size. - - - - - Looks up a localized string similar to A stream blob must have a blob size of 0.. - - - - - Looks up a localized string similar to The blob is larger than maximum supported size '{0}'. - - - - - Looks up a localized string similar to BlobType of the blob reference doesn't match BlobType of the blob.. - - - - - Looks up a localized string similar to Data already uploaded. - - - - - Looks up a localized string similar to The block size must be positive value. - - - - - Looks up a localized string similar to Block size can not be larger than '{0}'. - - - - - Looks up a localized string similar to Cannot create Shared Access Signature for snapshots. Perform the operation on the root blob instead.. - - - - - Looks up a localized string similar to Cannot create Shared Access Signature as the credentials does not have account name information. Please check that the credentials used support creating Shared Access Signature.. - - - - - Looks up a localized string similar to Cannot create Shared Access Signature unless the Account Key credentials are used by the BlobServiceClient.. - - - - - Looks up a localized string similar to Cannot perform this operation on a blob representing a snapshot.. - - - - - Looks up a localized string similar to Cannot retry operation using a source stream which does not support seek. To avoid this exception set the RetryPolicy to NoRetry or use a seekable stream.. - - - - - Looks up a localized string similar to Server operation did not finish within user specified timeout '{0}' seconds, check if operation is valid or try increasing the timeout.. - - - - - Looks up a localized string similar to If-Modified-Since and If-Unmodified-Since require a DateTime value.. - - - - - Looks up a localized string similar to If-Match and If-None-Match require an ETag value.. - - - - - Looks up a localized string similar to The conditionals specified for this operation did not match server.. - - - - - Looks up a localized string similar to SetConfigurationSettingPublisher needs to be called before FromConfigurationSetting can be used. - - - - - Looks up a localized string similar to The supplied credentials '{0'} cannot be used to sign request. - - - - - Looks up a localized string similar to The option '{0}' must be 'None' to delete a specific snapshot specified by '{1}'. - - - - - Looks up a localized string similar to Cannot combine incompatible absolute Uris base '{0}' relative '{1}'.When trying to combine 2 absolute Uris, the base uri should be a valid base of the relative Uri.. - - - - - Looks up a localized string similar to Invalid acl public access type returned '{0}'. Expected blob or container.. - - - - - Looks up a localized string similar to The continuation type passed in is unexpected. Please verify that the correct continuation type is passed in. Expected {0}, found {1}. - - - - - Looks up a localized string similar to Invalid query parameters inside Blob address '{0}'.. - - - - - Looks up a localized string similar to Listing snapshots is only supported in flat mode (no delimiter). Consider setting BlobRequestOptions.UseFlatBlobListing property to true.. - - - - - Looks up a localized string similar to Calculated MD5 does not match existing property. - - - - - Looks up a localized string similar to Messages cannot be larger than {0} bytes.. - - - - - Looks up a localized string similar to Cannot find account information inside Uri '{0}'. - - - - - Looks up a localized string similar to Invalid blob address '{0}', missing container information. - - - - - Looks up a localized string similar to Missing mandatory parameters for valid Shared Access Signature. - - - - - Looks up a localized string similar to Canonicalization did not find a non empty x-ms-date header in the WebRequest. Please use a WebRequest with a valid x-ms-date header in RFC 123 format (example request.Headers["x-ms-date"] = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture)). - - - - - Looks up a localized string similar to Cannot provide credentials as part of the address and as constructor parameter. Either pass in the address or use a different constructor.. - - - - - Looks up a localized string similar to Multiple different snapshot times provided as part of query '{0}' and as constructor parameter '{1}'.. - - - - - Looks up a localized string similar to EndMoveNextSegment must be called before the Current property can be accessed.. - - - - - Looks up a localized string similar to The segment cursor has no more results.. - - - - - Looks up a localized string similar to This operation is not supported for creating a PageBlob. Use other operations to create a PageBlob.. - - - - - Looks up a localized string similar to Missing account name information inside path style uri. Path style uris should be of the form http://<IPAddressPlusPort>/<accountName>. - - - - - Looks up a localized string similar to Address '{0}' is not an absolute address. Relative addresses are not permitted in here.. - - - - - Looks up a localized string similar to Attempting to seek past the end of the stream. - - - - - Looks up a localized string similar to Attempting to seek before the start of the stream. - - - - - Looks up a localized string similar to Server returned more that MaxResults requested. - - - - - Looks up a localized string similar to Snapshot query parameter is already defined in the blobUri. Either pass in a snapshotTime parameter or use a full URL with a snapshot query parameter.. - - - - - Looks up a localized string similar to '{0}' is not a valid table name.. - - - - - Looks up a localized string similar to The number of blocks is larger than the maximum of '{0}'. - - - - - Looks up a localized string similar to Too many '{0}' shared access policy identifiers provided. Server does not support setting more than '{1}' on a single container.. - - - - - Looks up a localized string similar to The blob type cannot be undefined.. - - - - - Represents a set of access conditions to be used for operations against the storage services. - - - - - Indicates that no access condition is set. - - - - - Returns an access condition such that an operation will be performed only if the resource has been modified since the specified time. - - The last-modified time for the resource, expressed as a UTC value. - A structure specifying the if-modified-since condition. - - - - Returns an access condition such that an operation will be performed only if the resource has not been modified since the specified time. - - The last-modified time for the resource, expressed as a UTC value. - A structure specifying the if-not-modified-since condition. - - - - Returns an access condition such that an operation will be performed only if the resource's ETag value matches the ETag value provided. - - The quoted ETag value to check. - A structure specifying the if-match condition. - - - - Returns an access condition such that an operation will be performed only if the resource's ETag value does not match the ETag value provided. - - The quoted ETag value to check. - A structure specifying the if-none-match condition. - - - - Converts AccessCondition into a type for use as a source conditional to Copy. - - The original condition. - The resulting header for the condition. - The value for the condition. - - - - Applies the condition to the web request. - - The request to be modified. - - - - Verifies the condition is satisfied. - - The ETag to check. - The last modified time UTC. - true if the condition is satisfied, otherwise false. - - - - Gets or sets the header of the request to be set. - - The access condition header. - - - - Gets or sets the value of the access condition header. - - The access condition header value. - - - - Represents a blob's attributes. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from an existing object. - - The set of blob attributes to clone. - - - - Gets the blob's system properties. - - The blob's properties. - - - - Gets the user-defined metadata for the blob. - - The blob's metadata, as a collection of name-value pairs. - - - - Gets the blob's URI. - - The absolute URI to the blob. - - - - Gets the date and time that the blob snapshot was taken, if this blob is a snapshot. - - The blob's snapshot time if the blob is a snapshot; otherwise, null. - - If the blob is not a snapshot, the value of this property is null. - - - - - Represents a container's attributes, including its properties and metadata. - - - - - Initializes a new instance of the class. - - - - - Gets the user-defined metadata for the container. - - The container's metadata, as a collection of name-value pairs. - - - - Gets the container's system properties. - - The container's properties. - - - - Gets the name of the container. - - The container's name. - - - - Gets the container's URI. - - The absolute URI to the container. - - - - Represents the permissions for a container. - - - - - Initializes a new instance of the class. - - - - - Gets or sets the public access setting for the container. - - The public access setting for the container. - - - - Gets the set of shared access policies for the container. - - The set of shared access policies for the container. - - - - Represents the system properties for a container. - - - - - Gets the ETag value for the container. - - The container's quoted ETag value. - - - - Gets the container's last-modified time, expressed as a UTC value. - - The container's last-modified time. - - - - Specifies the level of public access that is allowed on the container. - - - - - No public access. Only the account owner can read resources in this container. - - - - - Container-level public access. Anonymous clients can read container and blob data. - - - - - Blob-level public access. Anonymous clients can read only blob data within this container. - - - - - Provides error code strings that are specific to the Blob service. - - - - - Error code that may be returned when a block ID is invalid. - - - - - Error code that may be returned when a blob with the specified address cannot be found. - - - - - Error code that may be returned when a client attempts to create a blob that already exists. - - - - - Error code that may be returned when the specified block or blob is invalid. - - - - - Error code that may be returned when a block list is invalid. - - - - - Specifies which items to include when listing a set of blobs. - - - - - List only committed blobs, and do not return blob metadata. - - - - - List committed blobs and blob snapshots. - - - - - Retrieve blob metadata for each blob returned in the listing. - - - - - List committed and uncommitted blobs. - - - - - List all available committed blobs, uncommitted blobs, and snapshots, and return all metadata for those blobs. - - - - - Represents the system properties for a blob. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class based on an existing instance. - - The set of properties to clone. - - - - Gets or sets the cache-control value stored for the blob. - - The blob's cache-control value. - - - - Gets or sets the content-encoding value stored for the blob. - - The blob's content-encoding value. - - If this property has not been set for the blob, it returns null. - - - - - Gets or sets the content-language value stored for the blob. - - The blob's content-language value. - - If this property has not been set for the blob, it returns null. - - - - - Gets the size of the blob, in bytes. - - The blob's size in bytes. - - - - Gets or sets the content-MD5 value stored for the blob. - - The blob's content-MD5 hash. - - - - Gets or sets the content-type value stored for the blob. - - The blob's content-type value. - - If this property has not been set for the blob, it returns null. - - - - - Gets the blob's ETag value. - - The blob's quoted ETag value. - - - - Gets the the last-modified time for the blob, expressed as a UTC value. - - The blob's last-modified time, in UTC format. - - - - Gets the type of the blob. - - A object that indicates the type of the blob. - - - - Gets the blob's lease status. - - A object that indicates the blob's lease status. - - - - This class represents a seekable, read-only stream on a blob. - - - - - Represents a stream for reading and writing to a blob. - - - - - Aborts the operation to write to the blob. - - - - - Begins an asynchronous operation to commit a blob. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - This operation is not currently supported. - - - - - Ends an asynchronous operation to commit the blob. - - An that references the pending asynchronous operation. - asyncResult is null - - This operation is not currently supported. - - - - - Commits the blob. - - - This operation is not currently supported. - - - - - Gets a reference to the blob on which the stream is opened. - - The blob this stream accesses. - - - - Gets a value indicating whether the signature of each block should be verified. - - - Returns true if integrity control verification is enabled; otherwise, false. - - - - - Gets or sets the number of bytes to read ahead. - - The number of bytes to read ahead. - - This operation is not currently supported. - - - - - Gets or sets the block size. - - The size of the block. - - This operation is not currently supported. - - - - - The threshold beyond which we start a new read-Ahead. - - - - - The current position with the stream. - - - - - The number of bytes to read forward on every request. - - - - - The options applied to the stream. - - - - - True if the AccessCondition has been changed to match a single ETag. - - - - - The list of blocks for this blob. - - - - - The already available blocks for reading. This member is the only possible point of thread contention between the user's requests and ReadAhead async work. - At any particular time, the ReadAhead thread may be adding more items into the list. The second thread will never remove/modify an existing item within the list. - - - - - A handle to the parallel download of data for ReadAhead. - - - - - Initializes a new instance of the BlobReadStream class. - - The blob used for downloads. - Modifiers to be applied to the blob. After first request, the ETag is always applied. - The number of bytes to read ahead. - Controls whether block's signatures are verified. - - - - Setting the length of the blob is not supported. - - The desired length. - Always thrown. - - - - Write is not supported. - - An array of bytes. This method copies count bytes from buffer to the current stream. - The zero-based byte offset in buffer at which to begin copying bytes to the current stream. - The number of bytes to be written to the current stream. - - - - Flush is not supported on read-only stream. - - - - - Seeks to the desired position. Any seek outside of the buffered/read-ahead data will cancel read-ahead and clear the buffered data. - - A byte offset relative to the origin parameter. - A value of type System.IO.SeekOrigin indicating the reference point used to obtain the new position. - The new position within the current stream. - Thrown if offset is invalid for SeekOrigin - - - - Copies the specified amount of data from internal buffers to the buffer and advances the position. - - An array of bytes. When this method returns, the buffer contains the specified byte array with the values - between offset and (offset + count - 1) replaced by the bytes read from the current source. - The zero-based byte offset in buffer at which to begin storing the data read from the current stream. - The maximum number of bytes to be read from the current stream. - The total number of bytes read into the buffer. This can be less than the number of bytes requested - if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. - - The sum of offset and count is larger than the buffer length. - The buffer parameter is null. - The offset or count parameters are negative. - An I/O error occurs. - - - - Reads a byte from the stream and advances the position within the stream by one byte, or returns -1 if at the end of the stream. - - The unsigned byte cast to an Int32, or -1 if at the end of the stream. - - - - Begins an asynchronous read operation. - - The buffer to read the data into. - The byte offset in at which to begin writing data read from the stream. - The maximum number of bytes to read. - An optional asynchronous callback, to be called when the read is complete. - A user-provided object that distinguishes this particular asynchronous read request from other requests. - - An that represents the asynchronous read, which could still be pending. - - - Attempted an asynchronous read past the end of the stream, or a disk error occurs. - - - One or more of the arguments is invalid. - - - Methods were called after the stream was closed. - - - The current Stream implementation does not support the read operation. - - - - - Ends an asynchronous read operation. - - The reference to the pending asynchronous request to finish. - - The number of bytes read from the stream, between zero (0) and the number of bytes you requested. - Streams return zero (0) only at the end of the stream, otherwise, they should block until at least one byte is available. - - - is null. - - - did not originate from a method on the current stream. - - - The stream is closed or an internal error has occurred. - - - - - Wraps the Read operation to remap any exceptions into IOException. - - The buffer to read the data into. - The zero-based byte offset in buffer at which to begin storing the data read from the current stream. - The maximum number of bytes to be read from the current stream. - The action to be done upon completion to return the number of bytes read. - A task sequence representing the operation. - The sum of offset and count is larger than the buffer length. - The buffer parameter is null. - The offset or count parameters are negative - An I/O error occurs. - - - - Performs the read operation. - - The buffer to read the data into. - The zero-based byte offset in buffer at which to begin storing the data read from the current stream. - The maximum number of bytes to be read from the current stream. - The action to be done upon completion to return the number of bytes read. - A task sequence representing the operation. - - If verification is on, retrieve the blocklist. - If there are downloaded blocks, read from there. - Otherwise, if there's an outstanding request, wait for completion and read from there. - Otherwise perform a new request. - - - - - Locks download to a specific ETag. - - - - - Reads the data from the service starting at the specified location. Verifies the block's signature (if required) and adds it to the buffered data. - - The starting position of the read-ahead. - The number of bytes to read ahead. - An TaskSequence that represents the asynchronous read action. - - - - Ends an asynchronous read-ahead operation. - - An that references the pending asynchronous operation. - asyncResult is null - - - - Retrieves the size of the blob. - - If verification is on, it will retrieve the blocklist as well - - - - Verifies if the blocks are in expected format. Disables the integrity control if they are not appropriate for validation. - - - - - Calculates the ReadAhead bounds (start and count) as required by the existing data. - - The desired start position. - The end of the existing gap. - The desired number of bytes. - The start position rounded down to the nearest block start. - The number of bytes with readAheadSize included and rounded up to the end of the nearest block. - This calculates the bounds based on the blocklist, not any existing data. - - - - Reads from the verified blocks as much data as is available and needed. - - The buffer to read the data into. - The zero-based byte offset in buffer at which to begin storing the data read from the current stream. - The maximum number of bytes to be read from the current stream. - True if there was any data read. - - - - Calculates if the currently held data is less than percentage depleted. - - The start position for any ReadAhead based on the last block. - True if more data is needed. - - - - Verifies if the given offset is within the bounds of the stream. - - The offset to be checked. - This may do a server round-trip if the length is not known. - - - - Gets a value indicating whether the current stream supports reading. - - Returns true if the stream supports reading; otherwise, false. - - - - Gets a value indicating whether the current stream supports seeking. - - Returns true if the stream supports seeking; otherwise, false. - - - - Gets a value indicating whether the current stream supports writing. - - Returns true if the stream supports writing; otherwise, false. - - - - Gets a value indicating whether the current stream can time out. - - A value that determines whether the current stream can time out. - - - - Gets or sets a value, in miliseconds, that determines how long the stream will attempt to read before timing out. - - A value, in miliseconds, that determines how long the stream will attempt to read before timing out. - - - - Gets the length of the blob. - - May need to do a roundtrip to retrieve it. - - - - Gets or sets the position within the stream. - - - - - Gets or sets the number of bytes to read ahead. - - - - - Gets a value indicating whether the signature of each downloaded block should be verified. - - This requires having a blocklist, having blockIDs to be in the appropriate format. This causes all reads to be rounded to the nearest block. - - - - Gets the number of bytes that are cached locally but not yet read by user. - - - - - Gets a value indicating whether length is available. - - - - - Represents a single block of data that was downloaded. - - - - - Initializes a new instance of the class. - - The start offset. - The content. - - - - Gets the starting location of the block. - - - - - Gets the content of the block. - - - - - Encapsulates the collection of downloaded blocks and provides appropriate locking mechanism. - - - - - Holds the downloaded blocks. - - - - - Finds the block that contains the data for the . - - The position which is requested. - A block that contains the data for the or null. - - - - Removes any downloaded blocks that are outside the current bounds (position and readAheadSize). - - The position before which all blocks should be purged. - Size of the read-ahead beyond position for blocks to be kept. - - - - Calculates the length of the gap relative to . - - The position from which to find the gap. - Size of the desired. - The gap start. - The gap end. - - - - Tells if there are any blocks available. - - Returns true if there are any blocks; otherwise, false. - - - - Adds the specified downloaded block. - - The downloaded block. - - - - Removes the specified block based on the startOffset key. - - The key for the block. - - - - Represents a set of options that may be specified on a request. - - - - - The server and client timeout interval for the request. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class based on an - existing instance. - - The set of request options to clone. - - - - Initializes a new instance of the class. - - An object of type . - - - - Creates the full modifier. - - The type of the options. - The service. - An object that specifies any additional options for the request. - A full modifier of the requested type. - - - - Clones this instance. - - A clone of the instance. - - - - Applies the defaults. - - The service. - - - - Gets or sets the retry policy for the request. - - The retry policy delegate. - - - - Gets or sets the server and client timeout for the request. - - The server and client timeout interval for the request. - - - - Gets or sets the access condition for the request. - - A structure that specifies any conditional parameters on the request. - - - - Gets or sets the access condition on the source blob, when the request is to copy a blob. - - A structure that specifies any conditional parameters on the request. - - This property is applicable only to a request that will copy a blob. - - - - - Gets or sets options for deleting snapshots when a blob is to be deleted. - - One of the enumeration values that specifies whether to delete blobs and snapshots, delete blobs only, or delete snapshots only. - - This property is applicable only to a request that will delete a blob. - - - - - Gets or sets options for listing blobs. - - One of the enumeration values that indicates what items a listing operation will return. - - This property is applicable only to a request to list blobs. - - - - - Gets or sets a value indicating whether the blob listing operation will list all blobs in a container in a flat listing, - or whether it will list blobs hierarchically, by virtual directory. - - True if blobs will be listed in a flat listing; otherwise, false. The default value is false. - - This property is applicable only to a request to list blobs. - - - - - The type of a blob. - - - - - Not specified. - - - - - A page blob. - - - - - A block blob. - - - - - The class is an append-only stream for writing into storage. - - - - - Internal Block ID sequence number. Used in generating Block IDs. - - - - - The stream is writable until committed/close. - - - - - The current position within the blob. - - - - - The size of the blocks to use. - - - - - The list of uploaded blocks. - - - - - A memory stream holding the current block information. - - - - - The hash of the current block. - - - - - The ongoing blob hash. - - - - - The set of options applying to the current blob. - - - - - Initializes a new instance of the BlobWriteStream class. - - The blob used for uploads. - The options used for the stream. - The size of the blocks to use. - - - - The stream does not support reading. - - An array of bytes. When this method returns, the buffer contains the specified byte array with the values - between offset and (offset + count - 1) replaced by the bytes read from the current source. - The zero-based byte offset in buffer at which to begin storing the data read from the current stream. - The maximum number of bytes to be read from the current stream. - The total number of bytes read into the buffer. This can be less than the number of bytes requested - if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. - - Not supported operation as this is a write-only stream - - - - The stream does not support seeking. - - A byte offset relative to the origin parameter. - A value of type System.IO.SeekOrigin indicating the reference point used to obtain the new position. - The new position within the current stream. - Not supported operation as this is a write-only stream - - - - The stream does not support setting of length. - - The desired length of the current stream in bytes. - Growing a stream is not possible without writing. - - - - Write the provided data into the underlying stream. - - An array of bytes. This method copies count bytes from buffer to the current stream. - The zero-based byte offset in buffer at which to begin copying bytes to the current stream. - The number of bytes to be written to the current stream. - is null. - offset or count is negative. - Thrown if blob is already committed/closed - - - - Copies a single byte into the stream. - - The byte of data to be written. - - - - Begins an asynchronous write operation. - - The buffer to write data from. - The byte offset in buffer from which to begin writing. - The number of bytes to write. - An optional asynchronous callback, to be called when the write is complete. - A user-provided object that distinguishes this particular asynchronous write request from other requests. - An IAsyncResult that represents the asynchronous write, which could still be pending. - is null. - offset or count is negative. - Thrown if blob is already committed/closed - The operation will be completed synchronously if the buffer is not filled - - - B - Ends an asynchronous write operation. - - An that references the pending asynchronous operation. - asyncResult is null - - - - Causes any buffered data to be written to the remote storage. If the blob is not using blocks, the blob is fully committed. - - An I/O error occurs while writing to storage. - - - - Aborts the upload of the blob. - - - - - Begins an asynchronous operation to commit the blob. - - An optional asynchronous callback, to be called when the commit is complete. - A user-provided object that distinguishes this particular asynchronous commit request from other requests. - An IAsyncResult that represents the asynchronous commit, which could still be pending. - - - - Ends an asynchronous operation to commit the blob. - - An that references the pending asynchronous operation. - asyncResult is null - - - - Commits the blob on the server. - - - - - Implements the disposing logic of committing the blob. - - True to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Generates a blockID using the block's hash and a prefix. - - The base64 encoded blockID. - - - - Implements the block writing task. - - The buffer to write data from. - The byte offset in buffer from which to begin writing. - The number of bytes to write. - The sequence representing the uploading of the blocks. - - - - Creates a task that writes data for a full blob. - - The buffer to write data from. - The byte offset in buffer from which to begin writing. - The number of bytes to write. - The (synchronous) sequence that copies the data into a buffer. - Thrown if the buffer is larger than maximum blob size. - Since a non-block based blob is always fully buffered before upload, this task is a synchronous copy. - - - - Implements the flushing sequence. - - The sequence of events for a flush. - - - - Commits the blob by uploading any remaining data and the blocklist asynchronously. - - A sequence of events required for commit. - - - - Implements a sequence of events to upload a full blob. - - The sequence of events required to upload the blob. - - - - Sets the MD5 of the blob. - - - - - Implements a sequence to upload a block. - - The sequence of events for upload. - - - - Verifies that the blob is in writable state. - - Thrown if stream is non-writable. - - - - Resets the block and the block hash. - - - - - Creates the new block and the block hash. - - - - - Gets a value indicating whether the current stream supports reading. - - Returns true if the stream supports reading; otherwise, false. - - - - Gets a value indicating whether the current stream supports seeking. - - Returns true if the stream supports seeking; otherwise, false. - - - - Gets a value indicating whether the current stream supports writing. - - Returns true if the stream supports writing; otherwise, false. - - - - Gets a value indicating whether the current stream can time out. - - A value that determines whether the current stream can time out. - - - - Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out. - - - - - Gets the current length (equal to the position). - - - A long value representing the length of the stream in bytes. - - - A class derived from Stream does not support seeking. - - - Methods were called after the stream was closed. - - - - - Gets or sets the current position. - - - The current position within the stream. - - - An I/O error occurs. - - - The stream does not support seeking. - - - Methods were called after the stream was closed. - - - - - Gets or sets the block size. - - - - - Gets a value indicating whether the upload is done in blocks. - - Returns true if blocks are to be used; otherwise, false. - - - - Indicates whether to list only committed blocks, only uncommitted blocks, or all blocks. - - - - - Committed blocks. - - - - - Uncommitted blocks. - - - - - Both committed and uncommitted blocks. - - - - - Represents a Windows Azure blob. - - - - - Represents an item that may be returned by a blob listing operation. - - - - - Gets the URI to the blob item. - - The blob item's URI. - - - - Gets the blob item's parent. - - The blob item's parent. - - - - Gets the blob item's container. - - The blob item's container. - - - - Stores the blob's attributes. - - - - - Stores the that contains this blob. - - - - - Stores the name of this blob. - - - - - Stores the blob's parent . - - - - - Stores the blob's transformed address. - - - - - Initializes a new instance of the class using an absolute URI to the blob. - - The absolute URI to the blob. - - - - Initializes a new instance of the class using an absolute URI to the blob - and a set of credentials. - - The absolute URI to the blob. - The account credentials. - - - - Initializes a new instance of the class using an absolute URI to the blob, and the snapshot timestamp, - if the blob is a snapshot. - - The absolute URI to the blob. - The snapshot timestamp, if the blob is a snapshot. - The account credentials. - - - - Initializes a new instance of the class using a relative URI to the blob, and the snapshot timestamp, - if the blob is a snapshot. - - The relative URI to the blob, beginning with the container name. - The snapshot timestamp, if the blob is a snapshot. - A client object that specifies the endpoint for the Blob service. - - - - Initializes a new instance of the class using a relative URI to the blob. - - The relative URI to the blob, beginning with the container name. - A client object that specifies the endpoint for the Blob service. - - - - Initializes a new instance of the class based on an existing instance. - - An existing reference to a blob. - - - - Initializes a new instance of the class. - - Absolute Uri. - True to use path style Uri. - - Any authentication information inside the address will be used. - Otherwise a blob for anonymous access is created. - Any snapshot information as part of the address will be recorded - Explicity specify whether to use host style or path style Uri - - - - - Initializes a new instance of the class creating a new service client. - - Complete Uri. - Storage credentials. - True to use path style Uris. - - - - Initializes a new instance of the class with the given absolute Uri. - - True to use path style Uris. - The absolute blob Uri. - - - - Initializes a new instance of the class with existing attributes. - - The attributes (NOTE: Saved by reference, does not make a copy). - The service client. - The snapshot time. - - - - Initializes a new instance of the class using the specified blob Uri. - Note that this is just a reference to a blob instance and no requests are issued to the service - yet to update the blob properties, attribute or metaddata. FetchAttributes is the API that - issues such request to the service. - - A relative Uri to the blob. - A object that specifies the endpoint for the Blob service. - The reference to the parent container. - - - - Initializes a new instance of the class using the specified relative blob Uri. - If snapshotTime is not null, the blob instance represents a Snapshot. - Note that this is just a reference to a blob instance and no requests are issued to the service - yet to update the blob properties, attribute or metaddata. FetchAttributes is the API that - issues such request to the service. - - A relative Uri to the blob. - Snapshot time in case the blob is a snapshot. - A object that specifies the endpoint for the Blob service. - The reference to the parent container. - - - - Populates a blob's properties and metadata. - - - - - Populates a blob's properties and metadata. - - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to populate the blob's properties and metadata. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to populate the blob's properties and metadata. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to populate the blob's properties and metadata. - - An that references the pending asynchronous operation. - - - - Updates the blob's metadata. - - - - - Updates the blob's metadata. - - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to update the blob's metadata. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to update the blob's metadata. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to update the blob's metadata. - - An that references the pending asynchronous operation. - - - - Updates the blob's properties. - - - - - Updates the blob's properties. - - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to update the blob's properties. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to update the blob's properties. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to update the blob's properties. - - An that references the pending asynchronous operation. - - - - Copies an existing blob's contents, properties, and metadata to a new blob. - - The source blob. - - - - Copies a blob's contents, properties, and metadata to a new blob. - - The source blob. - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to copy a blob's contents, properties, and metadata to a new blob. - - The source blob. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to copy another blob's contents, properties, and metadata to the blob referenced by this object. - - The source blob. - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to copy a blob's contents, properties, and metadata to a new blob. - - An that references the pending asynchronous operation. - - - - Deletes the blob. - - - - - Deletes the blob. - - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to delete the blob. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to delete the blob. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to delete the blob. - - An that references the pending asynchronous operation. - - - - Deletes the blob if it exists. - - true if the blob was deleted; otherwise, false. - - - - Deletes the blob if it exists. - - An object that specifies any additional options for the request. - true if the blob was deleted; otherwise, false. - - - - Begins an asynchronous operation to delete the blob if it exists. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to delete the blob if it exists. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to delete the blob if it exists. - - An that references the pending asynchronous operation. - true if the blob was successfully deleted; otherwise, false. - - - - Opens a stream for writing to the blob. - - A stream to be used for writing to the blob. - - - - Opens a stream for writing to the blob. - - An object that specifies any additional options for the request. - A stream to be used for writing to the blob. - - - - Uploads a stream to a block blob. - - The stream providing the blob content. - - - - Uploads a stream to a block blob. - - The stream providing the blob content. - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to upload a stream to a block blob. - - The stream providing the blob content. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to upload a stream to a block blob. - - The stream providing the blob content. - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to upload a stream to a block blob. - - An that references the pending asynchronous operation. - - - - Uploads a string of text to a block blob. - - The text to upload, encoded as a UTF-8 string. - - - - Uploads a string of text to a block blob. - - The text to upload. - An object that indicates the text encoding to use. - An object that specifies any additional options for the request. - - - - Uploads a file from the file system to a block blob. - - The path and file name of the file to upload. - - - - Uploads a file from the file system to a block blob. - - The path and file name of the file to upload. - An object that specifies any additional options for the request. - - - - Uploads an array of bytes to a block blob. - - The array of bytes to upload. - - - - Uploads an array of bytes to a blob. - - The array of bytes to upload. - An object that specifies any additional options for the request. - - - - Opens a stream for reading the blob's contents. - - A stream to use for reading from the blob. - - - - Opens a stream for reading the blob's contents. - - An object that specifies any additional options for the request. - A stream to use for reading from the blob. - - - - Downloads the contents of a blob to a stream. - - The target stream. - - - - Downloads the contents of a blob to a stream. - - The target stream. - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to download the contents of a blob to a stream. - - The target stream. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to download the contents of a blob to a stream. - - The target stream. - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to download the contents of a blob to a stream. - - An that references the pending asynchronous operation. - - - - Downloads the blob's contents. - - The contents of the blob, as a string. - - - - Downloads the blob's contents. - - An object that specifies any additional options for the request. - The contents of the blob, as a string. - - - - Downloads the blob's contents to a file. - - The path and file name of the target file. - - - - Downloads the blob's contents to a file. - - The path and file name of the target file. - An object that specifies any additional options for the request. - - - - Downloads the blob's contents as an array of bytes. - - The contents of the blob, as an array of bytes. - - - - Downloads the blob's contents as an array of bytes. - - An object that specifies any additional options for the request. - The contents of the blob, as an array of bytes. - - - - Creates a snapshot of the blob. - - A blob snapshot. - - - - Creates a snapshot of the blob. - - An object that specifies any additional options for the request. - A blob snapshot. - - - - Creates a snapshot of the blob. - - A collection of name-value pairs defining the metadata of the snapshot. - An object that specifies any additional options for the request, or null. - A blob snapshot. - - - - Begins an asynchronous operation to create a snapshot of the blob. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to create a snapshot of the blob. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to create a snapshot of the blob. - - A collection of name-value pairs defining the metadata of the snapshot. - An object that specifies any additional options for the request, or null. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to create a snapshot of the blob. - - An that references the pending asynchronous operation. - A blob snapshot. - - - - Returns a shared access signature for the blob. - - The access policy for the shared access signature. - A shared access signature. - Thrown if the current credentials don't support creating a shared access signature. - Thrown if blob is a snapshot. - - - - Returns a shared access signature for the blob. - - The access policy for the shared access signature. - A container-level access policy. - A shared access signature. - Thrown if the current credentials don't support creating a shared access signature. - Thrown if blob is a snapshot. - - - - Dispatches the stream upload to a specific implementation method. - - The source stream. - An object that specifies any additional options for the request. - A that uploads the stream. - - - - Uploads the blob with buffering. - - The source stream. - An object that specifies any additional options for the request. - The size of the block. - A that uploads the blob. - - - - Uploads the full blob with retry. - - The source stream. - An object that specifies any additional options for the request. - A that uploads the blob. - - - - Uploads the full blob. - - The source stream. - An object that specifies any additional options for the request. - A that uploads the blob. - - - - Uploads the blob in parallel with blocks. - - The source stream. - The size of the block. - An object that specifies any additional options for the request. - A that uploads the blob. - - - - Uploads the block with retry. - - The source stream. - The block IS. - The content MD5. - An object that specifies any additional options for the request. - A that uploads the block. - - - - Uploads the block. - - The source stream. - The block ID. - The content MD5. - An object that specifies any additional options for the request. - A that uploads the block. - - - - Uploads the data into the web request. - - The request that is setup for a put. - The source of data. - The response from the server. - The sequence used for uploading data. - - - - Implements the FetchAttributes method. - - An object that specifies any additional options for the request. - A that fetches the attributes. - - - - Implements the DownloadToStream method. - - The target stream. - An object that specifies any additional options for the request. - A that downloads the blob to the stream. - - - - Implements the DownloadToStream method. - - The target stream. - An object that specifies any additional options for the request. - A that downloads the blob to the stream. - - - - Implements getting the stream. - - An object that specifies any additional options for the request. - The offset. - The count. - The set result. - A that gets the stream. - - - - Implements getting the stream without specifying a range. - - An object that specifies any additional options for the request. - A that gets the stream. - - - - Implements getting the stream without specifying a range. - - An object that specifies any additional options for the request. - The set result. - A that gets the stream. - - - - Retreive ETag and LastModified date time from response. - - The response to parse. - - - - Parses the blob address query and returns snapshot and SAS. - - The query to parse. - The snapshot value, if any. - The SAS credentials. - - - - Gets the default encoding for the blob, which is UTF-8. - - The default object. - - - - Gets the canonical name of the blob, formatted as /<account-name>/<container-name>/<blob-name>. - If ignoreSnapshotTime is false and this blob is a snapshot, the canonical name is augmented with a - query of the form ?snapshot=<snapshot-time>. - This is used by both Shared Access and Copy blob operations. - Used by both Shared Access and Copy blob operation. - - Indicates if the snapshot time is ignored. - The canonical name of the blob. - - - - Uploads a stream that doesn't have a known length. In this case we can't do any optimizations like creating a request before we read all of the data. - - The stream that is the source of data. - An object that specifies any additional options for the request. - The block size to be used (null - no blocks). - A sequence that represents uploading the blob. - This is implemented by creating a BlobStream and using that to buffer data until we have sufficient amount to be sent. - - - - Uploads the blob with blocks. - - The source stream. - An object that specifies any additional options for the request. - The size of the block. - A that uploads the blob. - - - - Uploads the full blob with a retry sequence. The stream must be seekable. - - The source stream, which must be seekable. - An object that specifies any additional options for the request. - A that uploads the blob. - - - - Implementation of the CopyFromBlob method. - - The source blob. - An object that specifies any additional options for the request. - A that copies the blob. - - - - Implements the DeleteBlob method. - - An object that specifies any additional options for the request. - A that deletes the blob. - - - - Implementation for the DeleteIfExists method. - - An object that specifies any additional options for the request. - The set result. - A that deletes the blob if it exists. - - - - Implementation for the CreateSnapshot method. - - A collection of name-value pairs defining the metadata of the snapshot, or null. - An object that specifies any additional options for the request. - The result report delegate. - A that creates the snapshot. - If the metadata parameter is null then no metadata is associated with the request. - - - - Implementation for the SetMetadata method. - - An object that specifies any additional options for the request. - A that sets the metadata. - - - - Implementation for the SetProperties method. - - An object that specifies any additional options for the request. - A that sets the properties. - - - - Verifies that write operation is not done for snapshot. - - - - - Parses the snapshot time. - - The snapshot time. - The parsed snapshot time. - - - - Parse Uri for any snapshot and SAS (Shared access signature) information. Validate that no other query parameters are passed in. - - The complete Uri. - The existing blob client. - True to use path style Uris. - - Any snapshot information will be saved. - Any SAS information will be recorded as corresponding credentials instance. - If existingClient is passed in, any SAS information found will not be supported. - Otherwise a new client is created based on SAS information or as anonymous credentials. - - - - - Gets the value that uniquely identifies the snapshot, if this blob is a snapshot. - - A value that uniquely identfies the snapshot. - - If the blob is not a snapshot, this property returns null. - - - - - Gets the object that represents the Blob service. - - A client object that specifies the Blob service endpoint. - - - - Gets the URI that identifies the blob. - - The address of the blob. - - - - Gets the object that represents the blob's attributes. - - The blob's attributes. - - - - Gets the blob's user-defined metadata. - - The blob's metadata. - - - - Gets the blob's system properties. - - The blob's system properties. - - - - Gets the blob's name. - - The blob's name. - - - - Gets a object representing the blob's container. - - The blob's container. - - - - Gets the object representing the - virtual parent directory for the blob. - - The blob's virtual parent directory. - - - - Gets a object based on this blob. - - A reference to a page blob. - - - - Gets a object based on this blob. - - A reference to a block blob. - - - - Gets the Uri after applying authentication transformation. - - The transformed address. - - - - Provides a client for accessing the Windows Azure Blob service. - - - - - Constant for the max value of ParallelOperationThreadCount. - - - - - Stores the default delimiter. - - - - - Stores the parallelism factor. - - - - - Default is 32 MB. - - - - - Default is 4 MB. - - - - - The default server and client timeout interval. - - - - - Initializes a new instance of the class to be used for anonymous access. - - The Blob service endpoint to use to create the client. - - - - Initializes a new instance of the class using the specified Blob service endpoint - and account credentials. - - The Blob service endpoint to use to create the client. - The account credentials. - - - - Initializes a new instance of the class using the specified Blob service endpoint - and account credentials. - - The Blob service endpoint to use to create the client. - The account credentials. - - - - Initializes a new instance of the class. - - True to use path style Uris. - The base Uri. - The credentials. - - - - Gets the properties of the blob service. - - The blob service properties. - - - - Begins an asynchronous operation to get the properties of the blob service. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user defined object to be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to get the properties of the blob service. - - The result returned from a prior call to . - The blob service properties. - - - - Sets the properties of the blob service. - - The blob service properties. - - - - Begins an asynchronous operation to set the properties of the blob service. - - The blob service properties. - The callback delegate that will receive notification when the asynchronous operation completes. - A user defined object to be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to set the properties of the blob service. - - The result returned from a prior call to . - - - - Returns a reference to a object with the specified address. - - The absolute URI to the blob, or a relative URI beginning with the container name. - A reference to a page blob. - - - - Returns a reference to a object with the specified address. - - The absolute URI to the blob, or a relative URI beginning with the container name. - A reference to a page blob. - - - - Returns a reference to a object with the specified address. - - The absolute URI to the blob, or a relative URI beginning with the container name. - The snapshot timestamp, if the blob is a snapshot. - A reference to a page blob. - - - - Returns a reference to a object with the specified address. - - The absolute URI to the blob, or a relative URI beginning with the container name. - A reference to a block blob. - - - - Returns a reference to a with the specified address. - - The absolute URI to the blob, or a relative URI beginning with the container name. - A reference to a block blob. - - - - Returns a reference to a with the specified address. - - The absolute URI to the blob, or a relative URI beginning with the container name. - The snapshot timestamp, if the blob is a snapshot. - A reference to a block blob. - - - - Returns a reference to a with the specified address. - - The absolute URI to the blob, or a relative URI beginning with the container name. - A reference to a blob. - - - - Returns a reference to a blob with the specified address. - - The absolute URI to the blob, or a relative URI beginning with the container name. - The snapshot timestamp, if the blob is a snapshot. - A reference to a blob. - - - - Returns a reference to a object with the specified address. - - The name of the container, or an absolute URI to the container. - A reference to a container. - - - - Returns a reference to a object with the specified address. - - The absolute URI to the virtual directory, - or a relative URI beginning with the container name. - A reference to a virtual directory. - - - - Returns an enumerable collection of containers. - - An enumerable collection of containers. - - - - Returns an enumerable collection of containers whose names begin with the specified prefix. - - The container name prefix. - An enumerable collection of containers. - - - - Returns an enumerable collection of containers whose names - begin with the specified prefix and that are retrieved lazily. - - The container name prefix. - A value that indicates whether to return container metadata with the listing. - An enumerable collection of containers that are retrieved lazily. - - - - Returns a result segment containing a collection of containers. - - A result segment of containers. - - - - Returns a result segment containing a collection of containers - whose names begin with the specified prefix. - - The container name prefix. - A result segment of containers. - - - - Returns a result segment containing a collection of containers - whose names begin with the specified prefix. - - The container name prefix. - A value that indicates whether to return container metadata with the listing. - A non-negative integer value that indicates the maximum number of results to be returned - in the result segment, up to the per-operation limit of 5000. If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - A result segment of containers. - - - - Begins an asynchronous request to return a result segment containing a collection of containers. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous request to return a result segment containing a collection of containers - whose names begin with the specified prefix. - - The container name prefix. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous request to return a result segment containing a collection of containers - whose names begin with the specified prefix. - - The container name prefix. - A value that indicates whether to return container metadata with the listing. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous request to return a result segment containing a collection of containers - whose names begin with the specified prefix. - - The container name prefix. - A value that indicates whether to return container metadata with the listing. - A non-negative integer value that indicates the maximum number of results to be returned - in the result segment, up to the per-operation limit of 5000. If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to return a result segment containing a collection of containers. - - An that references the pending asynchronous operation. - A result segment of containers. - - - - Returns an enumerable collection of blob items whose names begin with the specified prefix. - - The blob name prefix. This value must be preceded either by the name of the container or by the absolute URI to the container. - An enumerable collection of objects that implement . - - - - Returns an enumerable collection of blob items whose names begin with the specified prefix and that are retrieved lazily. - - The blob name prefix. This value must be preceded either by the name of the container or by the absolute URI to the container. - An object that specifies any additional options for the request. - An enumerable collection of objects that implement and are retrieved lazily. - - - - Returns a result segment containing a collection of blob items whose names - begin with the specified prefix. - - The blob name prefix. This value must be preceded either by the name of the container or by the absolute path to the container. - A result segment containing objects that implement . - - - - Returns a result segment containing a collection of blob items whose names - begin with the specified prefix. - - The blob name prefix. This value must be preceded either by the name of the container or by the absolute path to the container. - An object that specifies any additional options for the request. - A result segment containing objects that implement . - - - - Returns a result segment containing a collection of blob items whose names - begin with the specified prefix. - - The blob name prefix. This value must be preceded either by the name of the container or by the absolute path to the container. - A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the per-operation limit of 5000. - If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - A result segment containing objects that implement . - - - - Returns a result segment containing a collection of blob items whose names - begin with the specified prefix. - - The blob name prefix. This value must be preceded either by the name of the container or by the absolute path to the container. - A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the per-operation limit of 5000. - If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - An object that specifies any additional options for the request. - A result segment containing objects that implement . - - - - Begins an asynchronous operation to return a result segment containing a collection - of blob items whose names begin with the specified prefix. - - The blob name prefix. This value must be preceded either by the name of the container or by the absolute path to the container. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to return a result segment containing a collection - of blob items whose names begin with the specified prefix. - - The blob name prefix. This value must be preceded either by the name of the container or by the absolute path to the container. - A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the - per-operation limit of 5000. If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to return a result segment containing a collection - of blob items whose names begin with the specified prefix. - - An that references the pending asynchronous operation. - A result segment containing objects that implement . - - - - Selects the protocol response. - - The protocol item. - The service. - The container. - The parsed . - - - - Ends the asynchronous GetResponse operation. - - An that references the asynchronous operation. - The request to end the operation on. - The from the asynchronous request. - - - - Gets the response for the operation. - - The request to end the operation on. - The from the request. - - - - Parses the user prefix. - - The prefix. - Name of the container. - The listing prefix. - - - - Converts the date time to snapshot string. - - The snapshot time to convert. - A string representing the snapshot time. - - - - Implementation for the ListContainers method. - - The container prefix. - The details included. - The continuation token. - The maximum results to return. - The result report delegate. - A that lists the containers. - - - - Core implementation for the ListContainers method. - - The container prefix. - The details included. - The continuation token. - The pagination. - The result report delegate. - A that lists the containers. - - - - Implementation for the ListBlobs method. - - The blob prefix. - The continuation token. - The max results. - An object that specifies any additional options for the request. - The result report delegate. - - A that lists the blobs. - - - - - Generates a task sequence for getting the properties of the blob service. - - A delegate to receive the service properties. - A task sequence that gets the properties of the blob service. - - - - Generates a task sequence for setting the properties of the blob service. - - The blob service properties to set. - A task sequence that sets the properties of the blob service. - - - - Occurs when a response is received from the server. - - - - - Gets the account credentials used to create the Blob service client. - - The account credentials. - - - - Gets the base URI for the Blob service client. - - The base URI used to construct the Blob service client. - - - - Gets or sets the default retry policy for requests made via the Blob service client. - - The retry policy. - - - - Gets or sets the default server and client timeout for requests made by the Blob service client. - - The server and client timeout interval. - - - - Gets or sets the default delimiter that may be used to create a virtual directory structure of blobs. - - The default delimiter. - - - - Gets or sets the maximum size of a blob in bytes that may be uploaded as a single blob. - - The maximum size of a blob, in bytes, that may be uploaded as a single blob, - ranging from between 1 and 64 MB inclusive. - - - - Gets or sets the maximum block size for writing to a block blob. - - The maximum size of a block, in bytes, ranging from between 1 and 4 MB inclusive. - - - - Gets or sets the number of bytes to pre-fetch when reading from a stream. - - The number of bytes to read ahead from a stream. - - - - Gets or sets a value indicating whether the integrity of each block should be verified when reading from a stream. - - True if using integrity control for stream reading; otherwise, false. The default value is true. - - - - Gets or sets the number of blocks that may be simultaneously uploaded when uploading a blob that is greater than - the value specified by the property. - in size. - - The number of parallel operations that may proceed. - - - - Gets a value indicating whether the service client is used with Path style or Host style. - - Is true if use path style uris; otherwise, false. - - - - Represents a container in the Windows Azure Blob service. - - - - - Stores the transformed address. - - - - - Initializes a new instance of the class. - - The absolute URI to the container. - - - - Initializes a new instance of the class. - - The absolute URI to the container. - The account credentials. - - - - Initializes a new instance of the class. - - Either the absolute URI to the container, or the container name. - A client object that specifies the endpoint for the Blob service. - - - - Initializes a new instance of the class with the given address and path style Uri preference. - - The container's address. - True to use path style Uris. - - - - Initializes a new instance of the class. - - The container address. - The credentials. - If set to true path style Uris are used. - - - - Initializes a new instance of the class. - - The attributes for the container (NOTE: Stored by reference). - The client to be used. - - - - Initializes a new instance of the class. - - True to use path style Uris. - The container's address. - - - - Gets a reference to a blob in this container. - - The name of the blob, or the absolute URI to the blob. - A reference to a blob. - - - - Gets a reference to a page blob in this container. - - The name of the blob, or the absolute URI to the blob. - A reference to a page blob. - - - - Gets a reference to a block blob in this container. - - The name of the blob, or the absolute URI to the blob. - A reference to a block blob. - - - - Gets a reference to a virtual blob directory beneath this container. - - The name of the virtual blob directory, or the absolute URI to the virtual blob directory. - A reference to a virtual blob directory. - - - - Returns an enumerable collection of the blobs in the container. - - An enumerable collection of objects that implement . - - - - Returns an enumerable collection of the blobs in the container that are retrieved lazily. - - An object that specifies any additional options for the request. - An enumerable collection of objects that implement and are retrieved lazily. - - - - Returns a result segment containing a collection of blob items - in the container. - - An object that specifies any additional options for the request. - A result segment containing objects that implement . - - - - Returns a result segment containing a collection of blob items - in the container. - - A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the - per-operation limit of 5000. If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - An object that specifies any additional options for the request. - A result segment containing objects that implement . - - - - Begins an asynchronous operation to return a result segment containing a collection of blob items - in the container. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to return a result segment containing a collection of blob items - in the container. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to return a result segment containing a collection of blob items - in the container. - - A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the - per-operation limit of 5000. If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to return a result segment containing a collection of blob items - in the container. - - An that references the pending asynchronous operation. - A result segment containing objects that implement . - - - - Creates the container. - - - - - Creates the container. - - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to create a container. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to create a container. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to create a container. - - An that references the pending asynchronous operation. - - - - Creates the container if it does not already exist. - - true if the container did not already exist and was created; otherwise, false. - - - - Creates the container if it does not already exist. - - An object that specifies any additional options for the request. - true if the container did not already exist and was created; otherwise false. - - - - Begins an asynchronous request to create the container if it does not already exist. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous request to create the container if it does not already exist. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Returns the result of an asynchronous request to create the container if it does not already exist. - - An that references the pending asynchronous operation. - true if the container did not already exist and was created; otherwise, false. - - - - Deletes the container. - - - - - Deletes the container. - - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to delete a container. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to delete a container. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to delete a container. - - An that references the pending asynchronous operation. - - - - Sets permissions for the container. - - The permissions to apply to the container. - - - - Sets permissions for the container. - - The permissions to apply to the container. - An object that specifies any additional options for the request. - - - - Begins an asynchronous request to set permissions for the container. - - The permissions to apply to the container. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous request to set permissions for the container. - - The permissions to apply to the container. - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Returns the result of an asynchronous request to set permissions for the container. - - An that references the pending asynchronous operation. - - - - Gets the permissions settings for the container. - - The container's permissions. - - - - Gets the permissions settings for the container. - - An object that specifies any additional options for the request. - The container's permissions. - - - - Begins an asynchronous request to get the permissions settings for the container. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous request to get the permissions settings for the container. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Returns the asynchronous result of the request to get the permissions settings for the container. - - An that references the pending asynchronous operation. - The container's permissions. - - - - Retrieves the container's attributes. - - - - - Retrieves the container's attributes. - - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to retrieve the container's attributes. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to retrieve the container's attributes. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to retrieve the container's attributes. - - An that references the pending asynchronous operation. - - - - Sets the container's user-defined metadata. - - - - - Sets the container's user-defined metadata. - - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to set user-defined metadata on the container. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to set user-defined metadata on the container. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous request operation to set user-defined metadata on the container. - - An that references the pending asynchronous operation. - - - - Returns a shared access signature for the container. - - The access policy for the shared access signature. - A shared access signature. - - - - Returns a shared access signature for the container. - - The access policy for the shared access signature. - A container-level access policy. - A shared access signature. - - - - Implementation for the ListBlobs method. - - The blob prefix. - An object that specifies any additional options for the request. - The continuation token. - The maximum result size. - The result report delegate. - A that lists the blobs. - - - - Retrieve ETag and LastModified date time from response. - - The response to parse. - - - - Converts the ACL string to a object. - - The string to convert. - The resulting object. - - - - Parse Uri for SAS (Shared access signature) information. - - The complete Uri. - The client to use. - If true, path style Uris are used. - - Validate that no other query parameters are passed in. - Any SAS information will be recorded as corresponding credentials instance. - If existingClient is passed in, any SAS information found will not be supported. - Otherwise a new client is created based on SAS information or as anonymous credentials. - - - - - Returns the canonical name for shared access. - - The canonical name. - - - - Gets the absolute Uri of the blob. - - Name of the blob. - The blob's absolute Uri. - - - - Core implementation of the ListBlobs method. - - The blob prefix. - An object that specifies any additional options for the request. - The continuation token. - The pagination. - The result report delegate. - A that lists the blobs. - - - - Implementation for the Create method. - - An object that specifies any additional options for the request. - A that creates the container. - - - - Implementation for the CreateIfNotExist method. - - An object that specifies any additional options for the request. - The set result. - A that creates the container if it does not exist. - - - - Implementation for the Delete method. - - An object that specifies any additional options for the request. - A that deletes the container. - - - - Implementation for the FetchAttributes method. - - An object that specifies any additional options for the request. - A that fetches the attributes. - - - - Implementation for the SetMetadata method. - - An object that specifies any additional options for the request. - A that sets the metadata. - - - - Implementation for the SetPermissions method. - - The permissions to set. - An object that specifies any additional options for the request. - A that sets the permissions. - - - - Implementation for the GetPermissions method. - - An object that specifies any additional options for the request. - The result report delegate. - A that gets the permissions. - - - - Gets the service client for the container. - - A client object that specifies the endpoint for the Blob service. - - - - Gets the container's URI. - - The absolute URI to the container. - - - - Gets the name of the container. - - The container's name. - - - - Gets the container's metadata. - - The container's metadata. - - - - Gets the container's attributes. - - The container's attributes. - - - - Gets the container's system properties. - - The container's properties. - - - - Gets the Uri after applying authentication transformation. - - - - - Represents a virtual directory of blobs, designated by a delimiter character. - - - - - Stores the parent directory. - - - - - Stores the parent container. - - - - - Stores the prefix this directory represents. - - - - - Initializes a new instance of the class given an address and a client. - - The blob directory's address. - The client to use. - - - - Returns a reference to a blob in this virtual directory. - - The name of the blob. - A reference to a blob. - - - - Returns a reference to a blob in this virtual directory. - - The name of the blob. - The snapshot timestamp, if the blob is a snapshot. - A reference to a blob. - - - - Returns a reference to a page blob in this virtual directory. - - The name of the page blob. - A reference to a page blob. - - - - Returns a reference to a page blob in this virtual directory. - - The name of the page blob. - The snapshot timestamp, if the blob is a snapshot. - A reference to a page blob. - - - - Returns a reference to a block blob in this virtual directory. - - The name of the block blob. - A reference to a block blob. - - - - Returns a reference to a block blob in this virtual directory. - - The name of the block blob. - The snapshot timestamp, if the blob is a snapshot. - A reference to a block blob. - - - - Returns a virtual subdirectory within this virtual directory. - - The name of the virtual subdirectory. - A object representing the virtual subdirectory. - - - - Returns an enumerable collection of blob items in this virtual directory that is lazily retrieved, either as a flat listing or by virtual subdirectory. - - An object that specifies any additional options for the request. - An enumerable collection of objects that implement and are retrieved lazily. - - - - Returns an enumerable collection of blob items in this virtual directory, either as a flat listing or by virtual subdirectory. - - An enumerable collection of objects that implement . - - - - Returns a result segment containing a collection of blob items. - - An object that specifies any additional options for the request. - A result segment containing objects that implement . - - - - Returns a result segment containing a collection of blob items. - - A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the - per-operation limit of 5000. If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - An object that specifies any additional options for the request. - A result segment containing objects that implement . - - - - Begins an asynchronous request to return a result segment containing a collection of blob items. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous request to return a result segment containing a collection of blob items. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous request to return a result segment containing a collection of blob items. - - A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the - per-operation limit of 5000. If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous request to return a result segment containing a collection of blob items. - - An that references the pending asynchronous operation. - A result segment containing objects that implement . - - - - Initializes the prefix. - - - - - Gets the service client for the virtual directory. - - A client object that specifies the endpoint for the Blob service. - - - - Gets the URI that identifies the virtual directory. - - The URI to the virtual directory. - - - - Gets the container for the virtual directory. - - The container for the virtual directory. - - - - Gets the parent directory for the virtual directory. - - The virtual directory's parent directory. - - - - Gets the prefix. - - The prefix. - - - - Represents a blob that is uploaded as a set of blocks. - - - - - Initializes a new instance of the class using an absolute URI to the blob. - - The absolute URI to the blob. - The account credentials. - - - - Initializes a new instance of the class using a relative URI to the blob. - - The relative URI to the blob, beginning with the container name. - A client object that specifies the endpoint for the Blob service. - - - - Initializes a new instance of the class using a relative URI to the blob. - - The relative URI to the blob, beginning with the container name. - The snapshot timestamp, if the blob is a snapshot. - A client object that specifies the endpoint for the Blob service. - - - - Initializes a new instance of the class using an absolute URI to the blob. - - The absolute URI to the blob. - - - - Initializes a new instance of the class using an absolute URI to the blob. - - The absolute URI to the blob. - The account credentials. - True to use path-style URIs; otherwise, false. - - - - Initializes a new instance of the class using an absolute URI to the blob. - - The absolute URI to the blob. - True to use path-style URIs; otherwise, false. - - - - Initializes a new instance of the class based on an existing blob. - - The blob to clone. - - - - Initializes a new instance of the class. - - The attributes. - The service client. - The snapshot time. - - - - Initializes a new instance of the class using the specified blob Uri. - Note that this is just a reference to a blob instance and no requests are issued to the service - yet to update the blob properties, attribute or metaddata. FetchAttributes is the API that - issues such request to the service. - - Relative Uri to the blob. - Existing Blob service client which provides the base address. - The reference to the parent container. - - - - Initializes a new instance of the class using the specified blob Uri. - If snapshotTime is not null, the blob instance represents a Snapshot. - Note that this is just a reference to a blob instance and no requests are issued to the service - yet to update the blob properties, attribute or metaddata. FetchAttributes is the API that - issues such request to the service. - - Relative Uri to the blob. - Snapshot time in case the blob is a snapshot. - Existing Blob service client which provides the base address. - The reference to the parent container. - - - - Returns an enumerable collection of the committed blocks comprising the blob. - - An enumerable collection of objects implementing . - - - - Returns an enumerable collection of the committed blocks comprising the blob. - - An object that specifies any additional options for the request. - An enumerable collection of objects implementing . - - - - Returns an enumerable collection of the blob's blocks, using the specified block list filter. - - One of the enumeration values that indicates whether to return - committed blocks, uncommitted blocks, or both. - An enumerable collection of objects implementing . - - - - Returns an enumerable collection of the blob's blocks, using the specified block list filter. - - One of the enumeration values that indicates whether to return - committed blocks, uncommitted blocks, or both. - An object that specifies any additional options for the request. - An enumerable collection of objects implementing . - - - - Begins an asynchronous operation to return an enumerable collection of the blob's blocks, - using the specified block list filter. - - One of the enumeration values that indicates whether to return - committed blocks, uncommitted blocks, or both. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to return an enumerable collection of the blob's blocks, - using the specified block list filter. - - One of the enumeration values that indicates whether to return - committed blocks, uncommitted blocks, or both. - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to return an enumerable collection of the blob's blocks, - using the specified block list filter. - - An that references the pending asynchronous operation. - An enumerable collection of objects implementing . - - - - Uploads a single block. - - A base64-encoded block ID that identifies the block. - A stream that provides the data for the block. - An optional hash value that will be used to set the property - on the blob. May be null or an empty string. - - - - Uploads a single block. - - A base64-encoded block ID that identifies the block. - A stream that provides the data for the block. - An optional hash value that will be used to set the property - on the blob. May be null or an empty string. - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to upload a single block. - - A base64-encoded block ID that identifies the block. - A stream that provides the data for the block. - An optional hash value that will be used to set the property - on the blob. May be null or an empty string. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to upload a single block. - - A base64-encoded block ID that identifies the block. - A stream that provides the data for the block. - An optional hash value that will be used to set the property - on the blob. May be null or an empty string. - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to upload a single block. - - An that references the pending asynchronous operation. - - - - Uploads a list of blocks to a new or existing blob. - - An enumerable collection of block IDs, as base64-encoded strings. - - - - Uploads a list of blocks to a new or existing blob. - - An enumerable collection of block IDs, as base64-encoded strings. - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to upload a list of blocks to a new or existing blob. - - An enumerable collection of block IDs, as base64-encoded strings. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to upload a list of blocks to a new or existing blob. - - An enumerable collection of block IDs, as base64-encoded strings. - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to upload a list of blocks to a new or existing blob. - - An that references the pending asynchronous operation. - - - - Uploads the block list. - - The blocks to upload. - An object that specifies any additional options for the request. - A that uploads the block list. - - - - Gets the download block list. - - The types of blocks. - An object that specifies any additional options for the request. - The result report delegate. - A that gets the download block list. - - - - Parses the response. - - The block list response. - An enumerable list of objects. - - - - Represents a blob made up of a collection of pages. - - - - - Initializes a new instance of the class using an absolute URI to the blob. - - The absolute URI to the blob. - The account credentials. - - - - Initializes a new instance of the class using an absolute URI to the blob. - - The absolute URI to the blob. - - - - Initializes a new instance of the class using a relative URI to the blob. - - The relative URI to the blob, beginning with the container name. - A client object that specifies the endpoint for the Blob service. - - - - Initializes a new instance of the class using a relative URI to the blob. - - The relative URI to the blob, beginning with the container name. - The snapshot timestamp, if the blob is a snapshot. - A client object that specifies the endpoint for the Blob service. - - - - Initializes a new instance of the class based on an existing object. - - An object of type . - - - - Initializes a new instance of the class. - - The attributes. - The service client. - The snapshot time. - - - - Initializes a new instance of the class. - - The blob address. - The credentials. - If set to true, use path style Uris. - - - - Initializes a new instance of the class. - - The blob address. - If set to true, use path style Uris. - - - - Initializes a new instance of the class using the specified blob Uri. - Note that this is just a reference to a blob instance and no requests are issued to the service - yet to update the blob properties, attribute or metaddata. FetchAttributes is the API that - issues such request to the service. - - The blob address. - The service client. - The reference to the parent container. - - - - Initializes a new instance of the class using the specified blob Uri. - If snapshotTime is not null, the blob instance represents a Snapshot. - Note that this is just a reference to a blob instance and no requests are issued to the service - yet to update the blob properties, attribute or metaddata. FetchAttributes is the API that - issues such request to the service. - - The blob address. - Snapshot time in case the blob is a snapshot. - The service client. - The reference to the parent container. - - - - Creates a page blob. - - The maximum size of the page blob, in bytes. - - - - Creates a page blob. - - The maximum size of the page blob, in bytes. - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to create a page blob. - - The maximum size of the page blob, in bytes. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to create a page blob. - - The maximum size of the blob, in bytes. - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to create a page blob. - - An that references the pending asynchronous operation. - - - - Writes pages to a page blob. - - A stream providing the page data. - The offset at which to begin writing, in bytes. The offset must be a multiple of 512. - - - - Writes pages to a page blob. - - A stream providing the page data. - The offset at which to begin writing, in bytes. The offset must be a multiple of 512. - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to write pages to a page blob. - - A stream providing the page data. - The offset at which to begin writing, in bytes. The offset must be a multiple of 512. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to write pages to a page blob. - - A stream providing the page data. - The offset at which to begin writing, in bytes. The offset must be a multiple of 512. - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to write pages to a page blob. - - An that references the pending asynchronous operation. - - - - Clears pages from a page blob. - - The offset at which to begin clearing pages, in bytes. The offset must be a multiple of 512. - The length of the data range to be cleared, in bytes. The length must be a multiple of 512. - - - - Clears pages from a page blob. - - The offset at which to begin clearing pages, in bytes. The offset must be a multiple of 512. - The length of the data range to be cleared, in bytes. The length must be a multiple of 512. - An object that specifies any additional options for the request. - - - - Begins an asynchronous operation to clear pages from a page blob. - - The offset at which to begin clearing pages, in bytes. The offset must be a multiple of 512. - The length of the data range to be cleared, in bytes. The length must be a multiple of 512. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to clear pages from a page blob. - - The offset at which to begin clearing pages, in bytes. The offset must be a multiple of 512. - The length of the data range to be cleared, in bytes. The length must be a multiple of 512. - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to clear pages from a page blob. - - An that references the pending asynchronous operation. - - - - Gets a collection of page ranges and their starting and ending bytes. - - An enumerable collection of page ranges. - - - - Gets a collection of page ranges and their starting and ending bytes. - - An object that specifies any additional options for the request. - An enumerable collection of page ranges. - - - - Begins an asynchronous operation to return a collection of page ranges and their starting and ending bytes. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to return a collection of page ranges and their starting and ending bytes. - - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to return a collection of page ranges and their starting and ending bytes. - - An that references the pending asynchronous operation. - An enumerable collection of page ranges. - - - - Opens a stream for writing to the blob. - - A stream for writing to the blob. - This operation is not supported on objects of type . - - - - Opens a stream for writing to the blob. - - An object that specifies any additional options for the request. - A stream for writing to the blob. - This operation is not supported on objects of type . - - - - Uploads a blob from a stream. - - A stream that provides the blob content. - This operation is not supported on objects of type . - - - - Uploads a blob from a stream. - - A stream that provides the blob content. - An object that specifies any additional options for the request. - This operation is not supported on objects of type . - - - - Begins an asynchronous operation to upload a blob from a stream. - - The data stream to upload. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - This operation is not supported on objects of type . - - - - Begins an asynchronous operation to upload a blob from a stream. - - The data stream to upload. - An object that specifies any additional options for the request. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - This operation is not supported on objects of type . - - - - Ends an asynchronous operation to upload a blob from a stream. - - An that references the pending asynchronous operation. - This operation is not supported on objects of type . - - - - Uploads a string of text to a blob. - - The text to upload, encoded as a UTF-8 string. - This operation is not supported on objects of type . - - - - Uploads a string of text to a blob. - - The text to upload. - An object indicating the text encoding to use. - An object that specifies any additional options for the request. - This operation is not supported on objects of type . - - - - Uploads a file from the file system to a blob. - - The path and file name of the file to upload. - This operation is not supported on objects of type . - - - - Uploads a file from the file system to a blob. - - The path and file name of the file to upload. - An object that specifies any additional options for the request. - This operation is not supported on objects of type . - - - - Uploads an array of bytes to a blob. - - The array of bytes to upload. - This operation is not supported on objects of type . - - - - Uploads an array of bytes to a blob. - - The array of bytes to upload. - An object that specifies any additional options for the request. - This operation is not supported on objects of type . - - - - Creates an exception reporting that the creation method is not supported. - - The created exception. - - - - Implements the Create method. - - An object that specifies any additional options for the request. - The size in bytes. - A that creates the blob. - - - - Gets the page ranges impl. - - An object that specifies any additional options for the request. - The set result. - A for getting the page ranges. - - - - Implementation method for the WritePage methods. - - The page data. - The start offset. - The beginning position of the source stream prior to execution, negative if stream is unseekable. - An object that specifies any additional options for the request. - A that writes the pages. - - - - Implementation method for the ClearPage methods. - - The start offset. Must be multiples of 512. - Length of the data range to be cleared. Must be multiples of 512. - An object that specifies any additional options for the request. - A that writes the pages. - - - - Represents a Windows Azure queue. - - - - - Stores the queue attributes. - - - - - Uri for the messages. - - - - - Initializes a new instance of the class. - - The absolute URI to the queue. - The account credentials. - - - - Initializes a new instance of the class. - - The relative address. - The storage account credentials. - If set to true, use path style Uris. - - - - Initializes a new instance of the class. - - True to use path style Uris. - The address. - The credentials. - - - - Initializes a new instance of the class. - - The queue address. - The client. - - - - Initializes a new instance of the class. - - The attributes of the queue. - The client. - - - - Creates a queue. - - - - - Begins an asynchronous operation to create a queue. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to create a queue. - - An that references the pending asynchronous operation. - - - - Creates the queue if it does not exist. - - true if the queue did not exist and was created; otherwise false. - - - - Begins an asynchronous operation to create the queue if it does not exist. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to create the queue if it does not exist. - - An that references the pending asynchronous operation. - Returns true if the creation succeeded; otherwise, false. - - - - Deletes the queue. - - - - - Begins an asynchronous operation to delete the queue. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to delete the queue. - - An that references the pending asynchronous operation. - - - - Determines if the queue exists. - - True if the queue exists; otherwise false. - - - - Begins an asynchronous operation to determine whether the queue exists. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to determine whether the queue exists. - - An that references the pending asynchronous operation. - Returns true if the queue exists; otherwise, false. - - - - Fetches the queue's attributes. - - - - - Begins an asynchronous operation to fetch the queue's attributes. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to fetch the queue's attributes. - - An that references the pending asynchronous operation. - - - - Sets the queue's metadata. - - - - - Begins an asynchronous operation to set the queue's metadata. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to set the queue's metadata. - - An that references the pending asynchronous operation. - - - - Retrieves the approximate message count for the queue. This method fetches - the value from the server and updates the - property as well. - - The approximate message count. - - - - Adds a message to the queue. - - The message to add. - - - - Adds a message to the queue. - - The message to add. - The maximum time to allow the message to be in the queue. - - - - Adds a message to the queue. - - The message to add. - The maximum time to allow the message to be in the queue, or null. - The length of time from now during which the message will be invisible. - If null then the message will be visible immediately. - - - - Begins an asynchronous operation to add a message to the queue. - - The message to add. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to add a message to the queue. - - The message to add. - The maximum time to allow the message to be in the queue. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to add a message to the queue. - - The message to add. - The maximum time to allow the message to be in the queue, or null. - The length of time from now during which the message will be invisible. - If null then the message will be visible immediately. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to add a message to the queue. - - An that references the pending asynchronous operation. - - - - Gets a list of messages from the queue. - - The number of messages to retrieve. - An enumerable collection of messages. - - - - Gets a list of messages from the queue. - - The number of messages to retrieve. - The visibility timeout interval. - An enumerable collection of messages. - - - - Begins an asynchronous operation to get messages from the queue. - - The number of messages to retrieve. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to get messages from the queue. - - The number of messages to retrieve. - The visibility timeout interval. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to get messages from the queue. - - An that references the pending asynchronous operation. - An enumerable collection of messages. - - - - Gets a single message from the queue. - - A message. - - - - Gets a single message from the queue. - - The visibility timeout interval. - A message. - - - - Begins an asynchronous operation to get a single message from the queue. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to get a single message from the queue. - - The visibility timeout interval. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to get a single message from the queue. - - An that references the pending asynchronous operation. - A message. - - - - Peeks a message from the queue. - - A message. - - - - Begins an asynchronous operation to peek a message from the queue. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to peek a message from the queue. - - An that references the pending asynchronous operation. - A message. - - - - Peeks a set of messages from the queue. - - The number of messages to retrieve. - A enumerable collection of messages. - - - - Begins an asynchronous operation to peek a set of messages from the queue. - - The number of messages to retrieve. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to peek a set of messages from the queue. - - An that references the pending asynchronous operation. - An enumerable collection of messages. - - - - Deletes a message. - - A message. - - - - Deletes a message. - - The message ID. - The pop receipt value. - - - - Begins an asynchronous operation to delete a message. - - A message. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to delete a message. - - The message ID. - The pop receipt value. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to delete a message. - - An that references the pending asynchronous operation. - - - - Updates the visibility timeout and optionally the content of a message. - - The message to update. - The length of time from now during which the message will be invisible. - Flags indicating which parts of the message are to be updated. This must include the Visibility flag. - - - - Begins an asynchronous operation to update the visibility timeout and optionally the content of a message. - - The message to update. - The length of time from now during which the message will be invisible. - Flags indicating which parts of the message are to be updated. This must include the Visibility flag. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to update the visibility timeout and possibly the contents of a message. - - The IAsyncResult returned from a prior call to . - - - - Clears all messages from the queue. - - - - - Begins an asynchronous operation to clear all messages from the queue. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to clear all messages from the queue. - - An that references the pending asynchronous operation. - - - - Gets the individual message address. - - The message id. - The Uri of the message. - - - - Materialize results so that we can close the response object. - - List of response objects from the Protocol layer. - Projection function. - A materialized list of messages. - - - - Selects the get message response. - - The protocol message. - The parsed message. - - - - Selects the peek message response. - - The protocol message. - The parsed message. - - - - Gets the message internal. - - The visibility timeout. - The retrieved message. - - - - Gets the messages internal. - - The number of messages. - The visibility timeout. - A list of retrieved messages. - - - - Begins the get messages internal. - - The number of mesages. - The visibility timeout. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An asynchronous result that represents the operation. - - - - Existses the impl. - - The set result. - A that detects whether the queue exists. - - - - Sets the metadata impl. - - A that sets the metadata. - - - - Fetches the metadata and properties impl. - - A that fetches the attributes. - - - - Creates the impl. - - A that creates the queue. - - - - Creates if not exist impl. - - The set result. - A that creates the queue if it doesn't exist. - - - - Deletes the impl. - - A that deletes the queue. - - - - Clears the messages impl. - - A that clears the messages in the queue. - - - - Generates a task sequence for adding a message to the queue. - - The message. - The time to live. - The initial visibility delay. - A that adds the message. - - - - Generates a suitable string for representing the content of a message in the body of a web request. - - The message. - A string appropriately encoded depending on the format of the message and the EncodeMessage property. - - - - Peeks the messages impl. - - The number of messages. - The set result. - A that returns the peeked messages. - - - - Deletes the message impl. - - The message id. - The pop receipt value. - A that deletes the message. - - - - Generates a task sequence for updating a message in the queue. - - The message. - The visibility timeout. - The flags controlling which parts of the message to update. Must include Visibility. - A that updates the message. - - - - Gets the messages impl. - - The number of messages. - The visibility timeout. - The set result. - A that gets the message. - - - - Gets the properties and metadata from response. - - The web response. - - - - Gets the object that represents the Queue service. - - A client object that specifies the Queue service endpoint. - - - - Gets the queue name. - - The queue name. - - - - Gets the URI that identifies the queue. - - The address of the queue. - - - - Gets the queue's attributes. - - The queue's attributes. - - - - Gets the queue's user-defined metadata. - - The queue's user-defined metadata. - - - - Gets the approximate message count for the queue. - - The approximate message count. - - - - Gets or sets a value indicating whether to apply base64 encoding when adding or retrieving messages. - - True to encode messages; otherwise, false. The default value is true. - - - - Gets the Uri for general message operations. - - - - - Provides a client for accessing the Windows Azure Queue service. - - - - - The default server and client timeout interval. - - - - - Initializes a new instance of the class using the specified - Queue service endpoint and account credentials. - - The Queue service endpoint to use to create the client. - The account credentials. - - - - Initializes a new instance of the class using the specified - Queue service endpoint and account credentials. - - The Queue service endpoint to use to create the client. - The account credentials. - - - - Initializes a new instance of the class. - - The base address. - The credentials. - If set to true [use path style Uris]. - - - - Initializes a new instance of the class. - - The base address Uri. - The credentials. - If set to true [use path style Uris]. - - - - Initializes a new instance of the class. - - True to use path style Uris. - The base address Uri. - The credentials. - - - - Gets a reference to the queue at the specified address. - - Either the name of the queue, or the absolute URI to the queue. - A reference to the queue. - - - - Returns an enumerable collection of the queues in the storage account. - - An enumerable collection of queues. - - - - Returns an enumerable collection of the queues in the storage account whose names begin with the specified prefix. - - The queue name prefix. - An enumerable collection of queues. - - - - Returns an enumerable collection of the queues in the storage account whose names begin with the specified prefix and that are retrieved lazily. - - The queue name prefix. - One of the enumeration values that indicates which details to include in the listing. - An enumerable collection of queues that are retrieved lazily. - - - - Returns a result segment containing a collection of queues - in the storage account. - - A result segment containing a collection of queues. - - - - Returns a result segment containing a collection of queues - in the storage account. - - The queue name prefix. - One of the enumeration values that indicates which details to include in the listing. - A result segment containing a collection of queues. - - - - Returns a result segment containing a collection of queues - whose names begin with the specified prefix. - - The queue name prefix. - One of the enumeration values that indicates which details to include in the listing. - A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the - per-operation limit of 5000. If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - A result segment containing a collection of queues. - - - - Begins an asynchronous operation to return a result segment containing a collection of queues - in the storage account. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to return a result segment containing a collection of queues - whose names begin with the specified prefix. - - The queue name prefix. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to return a result segment containing a collection of queues - whose names begin with the specified prefix. - - The queue name prefix. - One of the enumeration values that indicates which details to include in the listing. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to return a result segment containing a collection of queues - whose names begin with the specified prefix. - - The queue name prefix. - One of the enumeration values that indicates which details to include in the listing. - A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the - per-operation limit of 5000. If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to return a result segment containing a collection of queues. - - An that references the pending asynchronous operation. - A result segment containing the results of the first request. - - - - Gets the properties of the queue service. - - The queue service properties. - - - - Begins an asynchronous operation to get the properties of the queue service. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user defined object to be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to get the properties of the queue service. - - The result returned from a prior call to . - The queue service properties. - - - - Sets the properties of the queue service. - - The queue service properties. - - - - Begins an asynchronous operation to set the properties of the queue service. - - The queue service properties. - The callback delegate that will receive notification when the asynchronous operation completes. - A user defined object to be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to set the properties of the queue service. - - The result returned from a prior call to . - - - - Ends the get response. - - The asynchronous result. - The request. - The web response. - - - - Lists the queues impl. - - The prefix. - The details included. - The continuation token. - The max results. - The set result. - A for listing the queues. - - - - Lists the queues impl core. - - The prefix. - The details included. - The continuation token. - The pagination. - The set result. - A for listing the queues. - - - - Selects the response. - - The item to parse. - A object representing the item. - - - - Generates a task sequence for getting the properties of the queue service. - - A delegate to receive the service properties. - A task sequence that gets the properties of the queue service. - - - - Generates a task sequence for setting the properties of the queue service. - - The queue service properties to set. - A task sequence that sets the properties of the queue service. - - - - Occurs when a response is received from the server. - - - - - Gets or sets the default retry policy for requests made via the Queue service client. - - The retry policy. - - - - Gets or sets the server timeout for requests made via the Queue service client. - - The server timeout interval. - - - - Gets or sets the lifetime of the approximate message count cache. Obsolete. - - The lifetime of the approximate message count cache. - The approximate message count is not cached. This is an obsolete property that has no effect. - - - - Gets a value indicating whether requests made via the Queue service client will employ path-style URIs. - - True to use path-style URIs; otherwise, false. - - - - Gets the account credentials used to create the Queue service client. - - An object of type . - - - - Gets the base URI for the Queue service client. - - The base URI used to construct the Queue service client. - - - - Enum for Queue message type. - - - - - Indicates the message object stores the raw text string. - - - - - Indicates the message object stores the Base64-Encoded representation of the raw data. - - - - - Represents a message in a queue. - - - - - The maximum message size in bytes. - - - - - The maximum amount of time a message is kept in the queue. - - - - - The maximum number of messages that can be peeked at a time. - - - - - Custom UTF8Encoder to throw exception in case of invalid bytes. - - - - - Initializes a new instance of the class with the given byte array. - - The content of the message as a byte array. - - - - Initializes a new instance of the class with the given string. - - The content of the message as a string of text. - - - - Initializes a new instance of the class with the given Base64 encoded string. - This method is only used internally. - - The text string. - Whether the string is Base64 encoded. - - - - Sets the content of this message. - - The new message content. - - - - Sets the content of this message. - - The new message content. - - - - Gets the content of the message as a byte array. - - The content of the message as a byte array. - - - - Gets or sets the message ID. - - The message ID. - - - - Gets or sets the message's pop receipt. - - The pop receipt value. - - - - Gets or sets the time that the message was added to the queue. - - The time that that message was added to the queue. - - - - Gets or sets the time that the message expires. - - The time that the message expires. - - - - Gets or sets the time that the message will next be visible. - - The time that the message will next be visible. - - - - Gets the content of the message, as a string. - - The message content. - - - - Gets or sets the number of times this message has been dequeued. - - The number of times this message has been dequeued. - - - - Gets message type that indicates if the RawString is the original message string or Base64 encoding of the original binary data. - - - - - Gets or sets the original message string or Base64 encoding of the original binary data. - - The original message string. - - - - Provides a set of extensions to the class that may be used to generate client objects for - the Windows Azure storage services. - - - - - Creates a new Blob service client. - - The storage account. - A client object that specifies the Blob service endpoint. - - - - Creates a new Queue service client. - - The storage account. - A client object that specifies the Queue service endpoint. - - - - Creates the Table service client. - - The storage account. - A client object that specifies the Table service endpoint. - - - - Provides a client for accessing the Windows Azure Table service. - - - - - The default server and client timeout interval. - - - - - Initializes a new instance of the class using the specified Table service endpoint - and account credentials. - - The Table service endpoint to use to create the client. - The account credentials. - - - - Initializes a new instance of the class using the specified Table service endpoint - and account credentials. - - The Table service endpoint to use to create the client. - The account credentials. - - - - Creates the tables needed for the specified service context. - - The type of service context. - The Table service endpoint to use to create the client. - The account credentials. - - - - Creates a new object for performing operations against the Table service. - - A service context to use for performing operations against the Table service. - - - - Attaches to the specified service context. - - The service context to attach to. - - - - Begins an asychronous operation to create a table. - - The table name. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asychronous operation to create a table. - - An that references the pending asynchronous operation. - - - - Creates a table with specified name. - - The table name. - - - - Begins an asynchronous operation to create a table with the specified name if it does not already exist. - - The table name. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to create a table with the specified name if it does not already exist. - - An that references the pending asynchronous operation. - true if table was created; otherwise, false. - - - - Creates the table if it does not already exist. - - The table name. - true if table was created; otherwise, false. - - - - Begins an asynchronous operation to determine whether a table exists. - - The table name. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to determine whether a table exists. - - An that references the pending asynchronous operation. - true if table exists; otherwise, false. - - - - Checks whether the table exists. - - The table name. - true if table exists; otherwise, false. - - - - Returns an enumerable collection of table names in the storage account. - - An enumerable collection of table names. - - - - Returns an enumerable collection of table names that begin with the specified prefix and that are retrieved lazily. - - The table name prefix. - An enumerable collection of table names that are retrieved lazily. - - - - Returns a result segment containing a collection of table names in the storage account. - - A result segment containing table names. - - - - Returns a result segment containing a collection of table names in the storage account. - - A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the - per-operation limit of 5000. If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - A result segment containing table names. - - - - Returns a result segment containing a collection of table names beginning with the specified prefix. - - The table name prefix. - A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the - per-operation limit of 5000. If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - A result segment containing table names. - - - - Begins an asynchronous operation to return a result segment containing a collection of table names - in the storage account. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to return a result segment containing a collection - of table names beginning with the specified prefix. - - The table name prefix. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to return a result segment containing a collection - of table names beginning with the specified prefix. - - The table name prefix. - A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the - per-operation limit of 5000. If this value is zero, the maximum possible number of results will be returned, up to 5000. - A continuation token returned by a previous listing operation. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to return a result segment containing a collection - of table names. - - An that references the pending asynchronous operation. - A result segment containing table names. - - - - Begins an asynchronous operation to delete a table. - - The table name. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - - An that references the asynchronous request. - - - - - Ends an asynchronous operation to delete a table. - - An that references the pending asynchronous operation. - - - - Deletes the table. - - The table name. - - - - Begins an asynchronous operation to delete the tables if it exists. - - The table name. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to delete the tables if it exists. - - An that references the pending asynchronous operation. - true if the table was deleted; otherwise, false. - - - - Deletes the table if it exists. - - The table name. - true if the table was deleted; otherwise, false. - - - - Gets the properties of the table service. - - The table service properties. - - - - Begins an asynchronous operation to get the properties of the table service. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user defined object to be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to get the properties of the table service. - - The result returned from a prior call to . - The table service properties. - - - - Sets the properties of the table service. - - The table service properties. - - - - Begins an asynchronous operation to set the properties of the table service. - - The table service properties. - The callback delegate that will receive notification when the asynchronous operation completes. - A user defined object to be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to set the properties of the table service. - - The result returned from a prior call to . - - - - Ends the asynchronous GetResponse operation. - - An that references the asynchronous operation. - The request to end the operation on. - The from the asynchronous request. - - - - Gets the result or default. - - The type of the result. - The task to retrieve the result from. - Receives result of the task. - true if the result was returned; otherwise, false. - - - - Creates the table implementation. - - The table name. - The set result. - A sequence of tasks to do the operation. - - - - Creates the table if not exist implementation. - - The table name. - The set result. - A sequence of tasks to do the operation. - - - - Verifies whether the table exist implementation. - - The table name. - The set result. - A sequence of tasks to do the operation. - - - - Returns an enumerable collection of tables segmented impl. - - The prefix. - The max results. - The continuation token. - The set result. - A that lists the tables. - - - - Returns an enumerable collection of tables segmented implementation. - - The prefix. - The continuation token. - The pagination. - The last result. - The set result. - A sequence of tasks to do the operation. - - - - Delete table implementation. - - The table name. - A sequence of tasks to do the operation. - - - - Deletes table if exists implementation. - - The table name. - The set result. - A sequence of tasks to do the operation. - - - - Generates a task sequence for getting the properties of the table service. - - A delegate to receive the service properties. - A task sequence that gets the properties of the table service. - - - - Generates a task sequence for setting the properties of the table service. - - The table service properties to set. - A task sequence that sets the properties of the table service. - - - - Occurs when a response is received from the server. - - - - - Gets the minimum supported timestamp value for a table entity. - - The minimum supported timestamp value for a table entity. - - - - Gets the base URI for the Table service client. - - The base URI used to construct the Table service client. - - - - Gets or sets the default retry policy for requests made via the Table service client. - - The retry policy. - - - - Gets or sets the default server timeout for requests made by the Table service client. - - The server timeout interval. - - - - Gets the account credentials used to create the Table service client. - - The account credentials. - - - - Represents a query against the Windows Azure Table service. - - The type of the query result. - - - - Stores the header prefix for continuation information. - - - - - Stores the header suffix for the next partition key. - - - - - Stores the header suffix for the next row key. - - - - - Stores the table suffix for the next table name. - - - - - Stores the maximum results the table service can return. - - - - - Stores the pagination options. - - - - - Stores the wrapped . - - - - - Initializes a new instance of the class with the specified query. - - The base query. - - - - Initializes a new instance of the class with the specified query - and retry policy. - - The base query. - The retry policy for the query. - - - - Executes the query with the retry policy specified on the object. - - The results of the query, retrieved lazily. - - - - Executes the query with the retry policy specified on the object. - - A continuation token returned by a previous listing operation. - The results of the query, retrieved lazily. - - - - Begins an asynchronous operation to execute a query and return the results as a result segment. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to execute a query and return the results as a result segment. - - A continuation token returned by a previous listing operation. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to execute a query and return the results as a result segment. - - The reference to the pending asynchronous request to finish. - A result segment containing objects of type . - - - - Expands the specified path. - - The path to expand. - A new query with the expanded path. - - - - Returns an enumerator that iterates through the collection. - - A that can be used to iterate through the collection. - - - - Returns a that represents this instance. - - A that represents this instance. - - - - Returns an enumerator that can be used to iterate through a collection. - - - An that can be used to iterate through a collection. - - - - - Executes the segmented impl. - - The continuation token. - The set result. - A that executes the query and returns the first segment of results. - - - - Rewrites the query for take count. - - The local query. - The pagination. - The rewritten query. - - - - Applies the continuation to query. - - The continuation token. - The local query. - The modified query. - - - - Gets the query take count. - - The query. - The take count of the query, if any. - - - - Gets the table continuation from response. - - The response. - The continuation. - - - - Gets or sets the retry policy for the query. - - The retry policy. - - - - Gets the type of the element(s) that are returned when the expression tree associated with this - instance of is executed. - - - A that represents the type of the element(s) that are returned when the expression tree associated with this object is executed. - - - - - Gets the expression tree that is associated with the instance of . - - - The that is associated with this instance of . - - - - - Gets the query provider that is associated with this data source. - - - The that is associated with this data source. - - - - - A set of common utilities for use in verfication. - - - - - Throws an exception if the string is empty or null. - - The name of the parameter. - The value of the parameter. - Thrown if value is empty. - Thrown if value is null. - - - - Throw an exception if the value is null. - - The name of the parameter. - The value of the parameter. - Thrown if value is null. - - - - Throw an exception indicating argument is out of range. - - The name of the parameter. - The value of the parameter. - - - - Throw an exception if the argument is out of bounds. - - The type of the value. - The name of the parameter. - The value of the parameter. - The minimum value for the parameter. - The maximum value for the parameter. - - - - Combines AssertNotNullOrEmpty and AssertInBounds for convenience. - - The name of the parameter. - Turns on or off null/empty checking. - The value of the parameter. - The maximum size of value. - - - - Throws if the result segment does not have more results. - - The type of the batch context. - The result segment to check. - - - - Determines if a Uri requires path style addressing. - - The Uri to check. - Returns true if the Uri uses path style addressing; otherwise, false. - - - - Asserts the segment result not empty. - - The type of the result segment. - The result. - - - - Performs a 'magic enumerator' lazy segmented enumeration. - - The type of the result. - The task sequence generator that produces the first segment. - The retry policy to use. - A 'magic enumerator' that makes requests when needed and chains segments accordingly. - - - - Rounds up to seconds. - - The time span. - The time rounded to seconds. - - - - Rounds up to seconds. - - The time span. - The time rounded to seconds. - - - - Rounds up to milliseconds. - - The time span. - The time rounded to milliseconds. - - - - Rounds up to milliseconds. - - The time span. - The time rounded to milliseconds. - - - - When calling the Get() operation on a queue, the content of messages - returned in the REST protocol are represented as Base64-encoded strings. - This internal function transforms the Base64 representation into a byte array. - - The Base64-encoded string. - The decoded bytes. - - - - Applies the request optimizations such as disabling buffering and 100 continue. - - The request to be modified. - The length of the content, -1 if the content length is not settable. - - - - Look for an inner exception of type DataServiceClientException. Different versions of Sytem.Data.Services.Client - have different levels of wrapping of a DataServiceClientException. - - The exception. - The found exception or null. - - - - Asserts the type of the continuation. - - The continuation token. - Type of the continuation. - - - - Specifies which details to include when listing the containers in this storage account. - - - - - No additional details. - - - - - Retrieve container metadata. - - - - - Retrieve all available details. - - - - - The set of options describing delete operation. - - - - - Delete blobs but not snapshots. - - - - - Delete the blob and its snapshots. - - - - - Delete the blob's snapshots only. - - - - - Contains methods for dealing with events. - - - - - This sets the event handler with request and response data and - translates storage exceptions. - - The request. - The handler. - The sender. - The processed response. - - - - This sets the event handler with request and response data and - translates storage exceptions. - - The request. - The async result. - The handler. - The sender. - The processed response. - - - - Set the event handler. - - The request. - The web response. - The event handler. - The sender. - The exception. - - - - The lease status of the blob. - - - - - The lease status is not specified. - - - - - The blob is locked for exclusive-write access. - - - - - The blob is available to be locked for exclusive write access. - - - - - Represents a block retrieved from the blob's block list. - - - - - Gets the name of the block. - - The block name. - - - - Gets the size of block in bytes. - - The block size. - - - - Gets a value indicating whether or not the block has been committed. - - True if the block has been committed; otherwise, false. - - - - Enumeration controlling the options for updating queue messages. - - - - - Update the message visibility timeout. - This is required for calls to UpdateMessage in version 2011-08-18. - - - - - Update the message content. - - - - - Contains methods for dealing with navigation. - - - - - The name of the root container. - - - - - Used in address parsing. - - - - - Used in address parsing. - - - - - Used in address parsing. - - - - - Used to split string on slash. - - - - - Used to split hostname. - - - - - Retrieves the container part of a storage Uri, or "$root" if the container is implicit. - - The blob address. - If set to true use path style Uris. - Name of the container. - - The trailing slash is always removed. - - GetContainerName(new Uri("http://test.blob.core.windows.net/mycontainer/myfolder/myblob")) will return "mycontainer" - GetConatinerName(new Uri("http://test.blob.core.windows.net/mycontainer/")) will return "mycontainer" - GetConatinerName(new Uri("http://test.blob.core.windows.net/myblob")) will return "$root" - GetConatinerName(new Uri("http://test.blob.core.windows.net/")) will throw ArgumentException - - - - - - Retrieves the blob part of a storage Uri. - - The blob address. - If set to true use path style Uris. - The name of the blob. - - - - Retreives the complete container address from a storage Uri - Example GetContainerAddress(new Uri("http://test.blob.core.windows.net/mycontainer/myfolder/myblob")) - will return http://test.blob.core.windows.net/mycontainer. - - The BLOB address. - True to use path style Uris. - Uri of the container. - - - - Retreives the parent name from a storage Uri. - - The BLOB address. - The delimiter. - If set to true use path style Uris. - The name of the parent. - - Adds the trailing delimiter as the prefix returned by the storage REST api always contains the delimiter. - - - GetParentName(new Uri("http://test.blob.core.windows.net/mycontainer/myfolder/myblob", "/")) will return "/mycontainer/myfolder/" - GetParentName(new Uri("http://test.blob.core.windows.net/mycontainer/myfolder|myblob", "|") will return "/mycontainer/myfolder|" - GetParentName(new Uri("http://test.blob.core.windows.net/mycontainer/myblob", "/") will return "/mycontainer/" - GetParentName(new Uri("http://test.blob.core.windows.net/mycontainer/", "/") will return "/mycontainer/" - - - - - Retrieves the parent address for a blob Uri. - - The BLOB address. - The delimiter. - If set to true use path style Uris. - The address of the parent. - - GetParentName(new Uri("http://test.blob.core.windows.net/mycontainer/myfolder/myblob", null)) - will return "http://test.blob.core.windows.net/mycontainer/myfolder/" - - - - - Get service client address from a complete Uri. - - Complete address of the resource. - True to use path style Uris. - Uri of the service client. - - GetServiceClientBaseAddress("http://testaccount.blob.core.windows.net/testconatiner/blob1") - returns "http://testaccount.blob.core.windows.net" - - - - - Gets the service client base address. - - The address Uri. - The use path style Uris. - The base address of the client. - - - - Appends a path to a Uri correctly using "/" as separator. - - The base Uri. - The relative or absloute URI. - The appended Uri. - - AppendPathToUri(new Uri("http://test.blob.core.windows.net/test", "abc") - will return "http://test.blob.core.windows.net/test/abc" - AppendPathToUri(new Uri("http://test.blob.core.windows.net/test"), "http://test.blob.core.windows.net/test/abc") - will return "http://test.blob.core.windows.net/test/abc" - - - - - Append a relative path to a Uri, handling traling slashes appropiately. - - The base Uri. - The relative or absloute URI. - The seperator. - The appended Uri. - - - - Get container name from address for styles of paths - Eg: http://test.blob.core.windows.net/container/blob => container - http://127.0.0.1:10000/test/container/blob => container. - - The container Uri. - If set to true use path style Uris. - The container name. - - - - Gets the canonical path from creds. - - The credentials. - The absolute path. - The canonical path. - - - - Similar to getting container name from Uri. - - The queue Uri. - If set to true use path style Uris. - The queue name. - - - - Retrieve the container address and address. - - The BLOB address. - True to use path style Uris. - Name of the container. - The container URI. - - - - Retrieve the container name and the blob name from a blob address. - - The blob address. - If set to true use path style Uris. - The resulting container name. - The resulting blob name. - - - - Represents a range of pages in a page blob. - - - - - Initializes a new instance of the class. - - The starting offset. - The ending offset. - - - - Returns the content of the page range as a string. - - The content of the page range. - - - - Gets the starting offset of the page range. - - The starting offset. - - - - Gets the ending offset of the page range. - - The ending offset. - - - - Class used to upload blocks for a blob in parallel. - - The parallelism factor is configurable at the CloudBlobClient. - - - - Stores the block size. - - - - - Stores the blob we're uploading. - - - - - Stores the request options to use. - - - - - Stores the blob's hash. - - - - - Stores the source stream to upload from. - - - - - Stores the dispensized stream size. - - - - - Bound on number of parallel active tasks (threads). - - - - - The list of uploaded blocks. - - - - - Number of block creation tasks. - - - - - Number of block upload tasks created. - - - - - Number of dispenser calls. - - - - - Initializes a new instance of the class. - - The source stream. - The request options. - The block size to use. - The blob to upload to. - - - - Perform a parallel upload of blocks for a blob from a given stream. - - The upload func. - A that uploads the blob in parallel. - - The operation is done as a series of alternate producer and consumer tasks. The producer tasks dispense out - chunks of source stream as fixed size blocks. This is done in serial order on a thread using InvokeTaskSequence's - serial execution. The consumer tasks upload each block in parallel on multiple thread. The producer thread waits - for at least one consumer task to finish before adding more producer tasks. The producer thread quits when no - more data can be read from the stream and no other pending consumer tasks. - - - - - Completes the asyncresult. - - The async results. - The index. - - - - Gets the wait timeout. - - The options. - The wait timeout. - - - - Upload a single block. This can happen on parallel threads. - - The block sequence prefix value. - The set result. - A that dispenses a block stream. - - - - Gets the parallelism factor. - - The parallelism factor. - - - - As a final step upload the block list to commit the blob. - - A that commits the blob. - - - - Assists in protocol implementation. - - - - - Gets the web request. - - The service client. - The options. - The retrieve request. - The web request. - - - - Parses the response XML from an operation to set the access policy for a container. - - - - - Provides a base class that is used internally to parse XML streams from storage service operations. - - The type to be parsed. - - - - Indicates that all parsable objects have been consumed. This field is reserved and should not be used. - - - - - Stores any objects that have not yet been parsed. This field is reserved and should not be used. - - - - - The reader used for parsing. This field is reserved and should not be used. - - - - - The IEnumerator over the parsed content. - - - - - Used to make sure that parsing is only done once, since a stream is not re-entrant. - - - - - Initializes a new instance of the ResponseParsingBase class. - - The stream to be parsed. - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Parses the XML response. This method is reserved and should not be used. - - A collection of enumerable objects. - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources, and optional - managed resources. - - True to release both managed and unmanaged resources; otherwise, false. - - - - This method is reserved and should not be used. - - True when the object is consumable. - - - - Parses the XML and close. - - A list of parsed results. - - - - Gets the parsable objects. This method is reserved and should not be used. - - The objects to parse. - - - - Initializes a new instance of the class. - - The stream to be parsed. - - - - Parses the response XML from a Set Container ACL operation to retrieve container-level access policy data. - - A list of enumerable key-value pairs. - - - - Gets an enumerable collection of container-level access policy identifiers. - - An enumerable collection of container-level access policy identifiers. - - - - Represents a container item returned in the XML response for a container listing operation. - - - - - Initializes a new instance of the class. - - - - - Gets the attributes for this container item. - - The container item's attributes. - - - - Represents a blob item returned in the XML response for a blob listing operation. - - - - - Defines an interface for blob items that are returned in the XML response for a blob listing operation. - - - - - Initializes a new instance of the class. - - The name of the blob. - The blob's attributes. - - - - Gets the attributes for this blob item. - - The blob item's attributes. - - - - Gets the name of the blob item. - - The name of the blob item. - - - - Provides a set of parameters for a blob listing operation. - - - - - Represents the listing context for enumeration operations. - - - - - Initializes a new instance of the class. - - The resource name prefix. - The maximum number of resources to return in a single operation, up to the per-operation limit of 5000. - - - - Gets or sets the Prefix value. - - The Prefix value. - - - - Gets or sets the MaxResults value. - - The MaxResults value. - - - - Gets or sets the Marker value. - - The Marker value. - - - - Initializes a new instance of the class. - - The blob prefix. - The maximum number of results to return. - The blob delimiter. - The include parameter. - - - - Gets or sets the delimiter for a blob listing operation. - - The delimiter to use to traverse the virtual hierarchy of blobs. - - The delimiter parameter enables the caller to traverse the blob namespace by using a user-configured delimiter. - Using this parameter, it is possible to traverse a virtual hierarchy of blobs as though it were a file system. - - - - - Gets or sets the details for the listing operation, which indicates the types of data to include in the - response. - - The details to include in the listing operation. - - The include parameter specifies that the response should include one or more of the following subsets: snapshots, - metadata, uncommitted blobs. - - - - - Represents the blob name prefix that is returned in the XML response for a blob listing operation. - - - - - Gets the blob name prefix. - - The blob name prefix. - - - - Provides a set of methods for constructing requests for blob operations. - - - - - Constructs a web request to create a new block blob or page blob, or to update the content - of an existing block blob. - - The absolute URI to the blob. - The server timeout interval. - The properties to set for the blob. - The type of the blob. - The lease ID, if the blob has an active lease. - For a page blob, the size of the blob. This parameter is ignored - for block blobs. - A web request to use to perform the operation. - - - - Constructs a web request to delete a blob. - - The absolute URI to the blob. - The server timeout interval. - The snapshot timestamp, if the blob is a snapshot. - A set of options indicating whether to delete only blobs, only snapshots, or both. - The lease ID, if the blob has an active lease. - A web request to use to perform the operation. - - - - Constructs a web request to return the user-defined metadata for the blob. - - The absolute URI to the blob. - The server timeout interval. - The snapshot timestamp, if the blob is a snapshot. - The lease ID, if the blob has an active lease. - A web request for performing the operiaton. - - - - Constructs a web request to set user-defined metadata for the blob. - - The absolute URI to the blob. - The server timeout interval. - The lease ID, if the blob has an active lease. - A web request for performing the operation. - - - - Signs the request for Shared Key authentication. - - The web request. - The account credentials. - - - - Adds user-defined metadata to the request as one or more name-value pairs. - - The web request. - The user-defined metadata. - - - - Adds user-defined metadata to the request as a single name-value pair. - - The web request. - The metadata name. - The metadata value. - - - - Constructs a web request to return the blob's system properties. - - The absolute URI to the blob. - The server timeout interval. - The snapshot timestamp, if the blob is a snapshot. - The lease ID. - A web request for performing the operation. - - - - Signs the request for Shared Key Lite authentication. - - The web request. - The account credentials. - - - - Adds a conditional header to the request. - - The web request. - The type of conditional header to add. - The blob's ETag. - - - - Adds a conditional header to the request. - - The web request. - The type of conditional header to add. - The date and time specification for the request. - - - - Constructs a web request to return a listing of all blobs in the container. - - The absolute URI to the blob. - The server timeout interval. - A set of parameters for the listing operation. - A web request to use to perform the operation. - - - - Constructs a web request to copy a blob. - - The absolute URI to the destination blob. - The server timeout interval. - The canonical path to the source blob, in the form /<account-name>/<container-name>/<blob-name>. - The snapshot version, if the source blob is a snapshot. - A type of condition to check on the source blob. - The value of the condition to check on the source blob. - The lease ID for the source blob, if it has an active lease. - A web request to use to perform the operation. - - - - Constructs a web request to get the blob's content, properties, and metadata. - - The absolute URI to the blob. - The server timeout interval. - The snapshot version, if the blob is a snapshot. - The lease ID for the blob, if it has an active lease. - A web request for performing the operation. - - - - Constructs a web request to return a specified range of the blob's content, together with its properties and metadata. - - The absolute URI to the blob. - The server timeout interval, in seconds. - The snapshot version, if the blob is a snapshot. - The byte offset at which to begin returning content. - The number of bytes to return, or null to return all bytes through the end of the blob. - The lease ID for the blob if it has an active lease, or null if there is no lease. - A web request to use to perform the operation. - - - - Constructs a web request to return the list of blocks for a block blob. - - The absolute URI to the blob. - The server timeout interval. - The snapshot timestamp, if the blob is a snapshot. - The types of blocks to include in the list: committed, uncommitted, or both. - The lease ID for the blob, if it has an active lease. - A web request to use to perform the operation. - - - - Constructs a web request to return the list of active page ranges for a page blob. - - The absolute URI to the blob. - The server timeout interval. - The snapshot timestamp, if the blob is a snapshot. - The lease ID, if the blob has an active lease. - A web request to use to perform the operation. - - - - Constructs a web request to use to acquire, renew, release or break the lease for the blob. - - The absolute URI to the blob. - The server timeout interval. - The lease action to perform. - The lease ID. - A web request to use to perform the operation. - - - - Constructs a web request to write a block to a block blob. - - The absolute URI to the blob. - The server timeout interval. - The block ID for this block. - The lease ID for the blob, if it has an active lease. - A web request to use to perform the operation. - - - - Constructs a web request to create or update a blob by committing a block list. - - The absolute URI to the blob. - The server timeout interval. - The properties to set for the blob. - The lease ID, if the blob has an active lease. - A web request for performing the operation. - - - - Writes the body of the block list to the specified stream in XML format. - - An enumerable collection of objects. - The stream to which the block list is written. - - - - Constructs a web request to write or clear a range of pages in a page blob. - - The absolute URI to the blob. - The server timeout interval. - The blob's properties. - The lease ID, if the blob has an active lease. - A web request to use to perform the operation. - - - - Constructs a web request to set system properties for a blob. - - The absolute URI to the blob. - The server timeout interval. - The blob's properties. - The lease ID, if the blob has an active lease. - The new blob size, if the blob is a page blob. Set this parameter to null to keep the existing blob size. - A web request to use to perform the operation. - - - - Constructs a web request to create a snapshot of a blob. - - The absolute URI to the blob. - The server timeout interval. - A web request to use to perform the operation. - - - - Creates a web request to get the properties of the service. - - The absolute URI to the service. - The server timeout interval, in seconds. - A web request to get the service properties. - - - - Creates a web request to set the properties of the service. - - The absolute URI to the service. - The server timeout interval, in seconds. - A web request to set the service properties. - - - - Writes service properties to a stream, formatted in XML. - - The service properties to format and write to the stream. - The stream to which the formatted properties are to be written. - - - - Adds the snapshot. - - The builder. - The snapshot version, if the blob is a snapshot. - - - - Creates the web request. - - The Uri of the resource. - The timeout to apply. - The query builder to use. - The resulting . - - - - Provides a set of methods for parsing responses from blob operations. - - - - - Returns extended error information from the storage service, that is in addition to the HTTP status code returned with the response. - - The web response. - An object containing extended error information returned with the response. - - - - Gets a collection of user-defined metadata from the response. - - The web response. - A collection of user-defined metadata, as name-value pairs. - - - - Gets an array of values for a specified name-value pair from a response that includes user-defined metadata. - - The web response. - The name associated with the metadata values to return. - An array of metadata values. - - - - Gets the blob's attributes, including its metadata and properties, from the response. - - The web response. - The blob's attributes. - - - - Gets the request ID from the response. - - The web response. - A unique value associated with the request. - - - - Gets the snapshot timestamp from the response. - - The web response. - The snapshot timestamp. - - - - Parses the response for a blob listing operation. - - The response stream. - An object that may be used for parsing data from the results of a blob listing operation. - - - - Parses the response for a blob listing operation. - - The web response. - An object that may be used for parsing data from the results of a blob listing operation. - - - - Parses the response for an operation that returns a block list for the blob. - - The response stream. - An object that may be used for parsing data from the results of an operation to return a block list. - - - - Parses the response for an operation that returns a block list for the blob. - - The web response. - An object that may be used for parsing data from the results of an operation to return a block list. - - - - Parses the response for an operation that returns a range of pages. - - The response stream. - An object that may be used for parsing data from the results of an operation to return a range of pages. - - - - Parses the response for an operation that returns a range of pages. - - The web response. - An object that may be used for parsing data from the results of an operation to return a range of pages. - - - - Reads service properties from a stream. - - The stream from which to read the service properties. - The service properties stored in the stream. - - - - Indicates which block lists should be searched to find a specified block. - - - - - Search the committed block list only. - - - - - Search the uncommitted block list only. - - - - - Search the uncommitted block list first, and if the block is not found there, search - the committed block list. - - - - - Represents the base canonicalization strategy used to authenticate a request against the storage services. - - - - - Constructs a canonicalized string for signing a request. - - The web request. - The name of the storage account. - A canonicalized string. - - - - Constructs a canonicalized string from the request's headers that will be used to construct the signature - string for signing a Blob or Queue service request under the Shared Key Lite authentication scheme. - - The request URI. - The storage account name. - The verb to be used for the HTTP request. - The content type of the HTTP request. - The date/time specification for the HTTP request. - A collection of additional headers specified on the HTTP request. - A canonicalized string. - - - - Constructs a canonicalized string from the request's headers that will be used to construct the signature - string for signing a Blob or Queue service request under the Shared Key Lite authentication scheme. - - The request URI. - The storage account name. - The verb to be used for the HTTP request. - The content type of the HTTP request. - The length of the HTTP request, in bytes. - The date/time specification for the HTTP request. - A collection of additional headers specified on the HTTP request. - A canonicalized string. - - - - Gets the value of a standard HTTP header. - - The collection of headers. - The name of the header. - The header value. - - - - Returns an of HTTP header values for a named header. - - A collection of HTTP headers as name-values pairs. - The name of the header to return. - An of HTTP header values, stored in the same order as they appear in the collection. - - - - Appends a string to the canonicalized resource string. - - The canonicalized resource string. - The string to append. - The modified canonicalized resource string. - - - - Gets the canonicalized resource string for a Blob or Queue service request under the Shared Key Lite authentication scheme. - - The resource URI. - The name of the storage account. - The canonicalized resource string. - - - - Gets the canonicalized resource string for a Blob or Queue service request under the Shared Key authentication scheme. - - The resource URI. - The name of the storage account. - The canonicalized resource string. - - - - Adds the canonicalized resource for version 2. - - The address. - Name of the account. - The canonicalized string. - - - - Add the resource name. - - The address. - Name of the account. - The canonicalized string. - - - - Add x-ms- prefixed headers in a fixed order. - - The headers. - The canonicalized string. - - - - Retrieve appropriate version of CanonicalizationStrategy based on the webrequest - for Blob Queue and Table. - - - - - Stores the version 1 blob/queue full signing strategy. - - - - - Stores the version 1 table lite signing strategy. - - - - - Stores the version 2 blob/queue full signing strategy. - - - - - Stores the version 1 table full signing strategy. - - - - - Gets canonicalization strategy for Blob and Queue SharedKey Authentication. - - The request. - The canonicalization strategy. - - - - Get canonicalization strategy for Tables for SharedKeyLite Authentication. - - The request. - The canonicalization strategy. - - - - Gets the table full canonicalization strategy. - - The request. - The canonicalization strategy. - - - - Gets the BLOB queue lite canonicalization strategy. - - The request. - The canonicalization strategy. - - - - Determines whether [is target version2] [the specified request]. - - The request. - - Returns true if [is target version2] [the specified request]; otherwise, false. - - - - - Gets the BLOB queue full ver1. - - The BLOB queue full ver1. - - - - Gets the table lite ver1. - - The table lite ver1. - - - - Gets the table full ver1. - - The table full ver1. - - - - Gets the BLOB queue full ver2. - - The BLOB queue full ver2. - - - - An internal class that stores the canonicalized string version of an HTTP request. - - - - - Stores the internal that holds the canonicalized string. - - - - - Initializes a new instance of the class. - - The first canonicalized element to start the string with. - - - - Append additional canonicalized element to the string. - - An additional canonicalized element to append to the string. - - - - Gets the canonicalized string. - - - - - Specifies the kinds of conditional headers that may be set for a request. - - - - - Indicates that no conditional headers are set. - - - - - The If-Unmodified-Since header. - - - - - The If-Match header. - - - - - The If-Modified-Since header. - - - - - The If-None-Match header. - - - - - Contains storage constants. - - - - - Maximum number of shared access policy identifiers supported by server. - - - - - Default Write Block Size used by Blob stream. - - - - - Default Read Ahead Size used by Blob stream. - - - - - The maximum size of a blob before it must be separated into blocks. - - - - - The maximum size of a blob with blocks. - - - - - The maximum size of a single block. - - - - - The maximum number of blocks. - - - - - Default size of buffer for unknown sized requests. - - - - - This is used to create BlockIDs. The prefix must be Base64 compatible. - - - - - The size of a page in a PageBlob. - - - - - A constant representing a kilo-byte (Non-SI version). - - - - - A constant representing a megabyte (Non-SI version). - - - - - A constant representing a megabyte (Non-SI version). - - - - - XML element for committed blocks. - - - - - XML element for uncommitted blocks. - - - - - XML element for blocks. - - - - - XML element for names. - - - - - XML element for sizes. - - - - - XML element for block lists. - - - - - XML element for queue message lists. - - - - - XML element for queue messages. - - - - - XML element for message IDs. - - - - - XML element for insertion times. - - - - - XML element for expiration times. - - - - - XML element for pop receipts. - - - - - XML element for the time next visible fields. - - - - - XML element for message texts. - - - - - XML element for dequeue counts. - - - - - XML element for page ranges. - - - - - XML element for page list elements. - - - - - XML element for page range start elements. - - - - - XML element for page range end elements. - - - - - XML element for delimiters. - - - - - XML element for blob prefixes. - - - - - XML element for content type fields. - - - - - XML element for content encoding fields. - - - - - XML element for content language fields. - - - - - XML element for content length fields. - - - - - XML element for content MD5 fields. - - - - - XML element for blobs. - - - - - XML element for prefixes. - - - - - XML element for maximum results. - - - - - XML element for markers. - - - - - XML element for the next marker. - - - - - XML element for the ETag. - - - - - XML element for the last modified date. - - - - - XML element for the Url. - - - - - XML element for blobs. - - - - - Constant signalling a page blob. - - - - - Constant signalling a block blob. - - - - - Constant signalling the blob is locked. - - - - - Constant signalling the blob is unlocked. - - - - - XML element for blob types. - - - - - XML element for the lease status. - - - - - XML element for snapshots. - - - - - XML element for containers. - - - - - XML element for a container. - - - - - XML element for queues. - - - - - XML element for the queue name. - - - - - Version 2 of the XML element for the queue name. - - - - - XML element for the queue. - - - - - XML element for the metadata. - - - - - XML element for an invalid metadata name. - - - - - XPath query for error codes. - - - - - XPath query for error messages. - - - - - XML element for maximum results. - - - - - XML element for committed blocks. - - - - - XML element for uncommitted blocks. - - - - - XML element for the latest. - - - - - XML element for signed identifiers. - - - - - XML element for a signed identifier. - - - - - XML element for access policies. - - - - - XML attribute for IDs. - - - - - XML element for the start time of an access policy. - - - - - XML element for the end of an access policy. - - - - - XML element for the permissions of an access policy. - - - - - The maximum size of a string property for the table service in bytes. - - - - - The maximum size of a string property for the table service in chars. - - - - - The name of the special table used to store tables. - - - - - The Uri path component to access the messages in a queue. - - - - - XML root element for errors. - - - - - XML element for error codes. - - - - - XML element for error messages. - - - - - XML element for exception details. - - - - - XML element for exception messages. - - - - - XML element for stack traces. - - - - - XML element for the authentication error details. - - - - - XML namespace for the WCF Data Services metadata. - - - - - XML element for table error codes. - - - - - XML element for table error messages. - - - - - Default client side timeout for all service clients. - - - - - Maximum allowed timeout for any request. - - - - - This is used to create V1 BlockIDs. The prefix must be Base64 compatible. - - - - - This is the offset of the V2 MD5 string where the MD5/ tag resides. - - - - - This is used to create BlockIDs. The prefix must be Base64 compatible. - - - - - This is the offset of the V2 MD5 string where the hash value resides. - - - - - This is the expected length of a V2 MD5 Block ID string. - - - - - The minimum supported value for the table service. - - - - - The timeout after which the WCF Data Services bug workaround kicks in. This should be greater than the timeout we pass to DataServiceContext (90 seconds). - - - - - Constants for HTTP headers. - - - - - Master Windows Azure Storage header prefix. - - - - - Header prefix for properties. - - - - - Header prefix for metadata. - - - - - Header for data ranges. - - - - - Header for storage version. - - - - - Header for copy source. - - - - - Header for the If-Match condition. - - - - - Header for the If-Modified-Since condition. - - - - - Header for the If-None-Match condition. - - - - - Header for the If-Unmodified-Since condition. - - - - - Header for the blob content length. - - - - - Header for the blob type. - - - - - Header for snapshots. - - - - - Header to delete snapshots. - - - - - Header that specifies approximate message count of a queue. - - - - - Header that specifies a range. - - - - - Header that specifies blob caching control. - - - - - Header that specifies blob content encoding. - - - - - Header that specifies blob content language. - - - - - Header that specifies blob content MD5. - - - - - Header that specifies blob content type. - - - - - Header that specifies blob content length. - - - - - Header that specifies lease ID. - - - - - Header that specifies lease status. - - - - - Header that specifies page write mode. - - - - - Header that specifies the date. - - - - - Header indicating the request ID. - - - - - Header that specifies public access to blobs. - - - - - Format string for specifying ranges. - - - - - Current storage version header value. - - - - - Specifies the page blob type. - - - - - Specifies the block blob type. - - - - - Specifies only snapshots are to be included. - - - - - Specifies snapshots are to be included. - - - - - Specifies the value to use for UserAgent header. - - - - - Specifies the pop receipt for a message. - - - - - Specifies the next visible time for a message. - - - - - Constants for query strings. - - - - - Query component for snapshot time. - - - - - Query component for the signed SAS start time. - - - - - Query component for the signed SAS expiry time. - - - - - Query component for the signed SAS resource. - - - - - Query component for the signed SAS permissions. - - - - - Query component for the signed SAS identifier. - - - - - Query component for the signed SAS version. - - - - - Query component for SAS signature. - - - - - Query component for message time-to-live. - - - - - Query component for message visibility timeout. - - - - - Query component for message pop receipt. - - - - - Query component for resource type. - - - - - Query component for the operation (component) to access. - - - - - Provides a set of methods for constructing requests for container operations. - - - - - Constructs a web request to create a new container. - - The absolute URI to the container. - The server timeout interval. - A web request to use to perform the operation. - - - - Constructs a web request to delete the container and all of blobs within it. - - The absolute URI to the container. - The server timeout interval. - A web request to use to perform the operation. - - - - Constructs a web request to retrieve the container's metadata. - - The absolute URI to the container. - The server timeout interval. - A web request to use to perform the operation. - - - - Constructs a web request to return the user-defined metadata for this container. - - The absolute URI to the container. - The server timeout interval. - A web request to use to perform the operation. - - - - Constructs a web request to set user-defined metadata for the container. - - The absolute URI to the container. - The server timeout interval. - A web request to use to perform the operation. - - - - Signs the request for Shared Key authentication. - - The web request. - The account credentials. - - - - Adds user-defined metadata to the request as one or more name-value pairs. - - The web request. - The user-defined metadata. - - - - Adds user-defined metadata to the request as a single name-value pair. - - The web request. - The metadata name. - The metadata value. - - - - Signs the request for Shared Key Lite authentication. - - The web request. - The account credentials. - - - - Adds a conditional header to the request. - - The web request. - The type of conditional header to add. - The container's ETag. - - - - Adds a conditional header to the request. - - The web request. - The type of conditional header to add. - The date and time specification for the request. - - - - Constructs a web request to return a listing of all containers in this storage account. - - The absolute URI for the account. - The server timeout interval. - A set of parameters for the listing operation. - Additional details to return with the listing. - A web request for the specified operation. - - - - Constructs a web request to return the ACL for this container. - - The absolute URI to the container. - The server timeout interval. - A web request to use to perform the operation. - - - - Sets the ACL for the container. - - The absolute URI to the container. - The server timeout interval. - The type of public access to allow for the container. - A web request to use to perform the operation. - - - - Writes a collection of shared access policies to the specified stream in XML format. - - A collection of shared access policies. - An output stream. - - - - Gets the container Uri query builder. - - A for the container. - - - - Creates the web request. - - The absolute URI to the container. - The server timeout interval. - The query builder to use. - A web request to use to perform the operation. - - - - Provides a set of methods for parsing responses from container operations. - - - - - Returns extended error information from the storage service, that is in addition to the HTTP status code returned with the response. - - The web response. - An object containing extended error information returned with the response. - - - - Gets a collection of user-defined metadata from the response. - - The web response. - A collection of user-defined metadata, as name-value pairs. - - - - Gets an array of values for a specified name-value pair from the user-defined metadata included in the response. - - The web response. - The name associated with the metadata values to return. - An array of metadata values. - - - - Gets the container's attributes, including its metadata and properties, from the response. - - The web response. - The container's attributes. - - - - Gets the request ID from the response. - - The web response. - A unique value associated with the request. - - - - Gets the ACL for the container from the response. - - The web response. - A value indicating the public access level for the container. - - - - Parses the response for a container listing operation. - - The web response. - An object that may be used for parsing data from the results of a container listing operation. - - - - Represents the credentials used to sign a request against the storage services. - - - - - Initializes a new instance of the class. - - The storage account name. - The access key. - - - - Initializes a new instance of the class. - - The storage account name. - The access key, as a Base64-encoded string. - - - - Exports the value of the access key to an array of bytes. - - The account access key. - - - - Exports the value of the access key to a Base64-encoded string. - - The account access key. - - - - Gets the account name to be used in signing the request. - - The name of the account. - - - - Gets or sets the account name whose key is used to sign requests. - - The name of the account whose key is used to sign requests. - - - - Gets the access key to be used in signing the request. - - - - - Provides methods for parsing the response from an operation to return a block list. - - - - - Initializes a new instance of the class. - - The stream to be parsed. - - - - Parses the XML response returned by an operation to retrieve a list of blocks. - - An enumerable collection of objects. - - - - Gets an enumerable collection of objects from the response. - - An enumerable collection of objects. - - - - Provides methods for parsing the response from an operation to get messages from a queue. - - - - - Initializes a new instance of the class. - - The stream of messages to parse. - - - - Parses the XML response returned by an operation to get messages from a queue. - - An enumerable collection of objects. - - - - Gets an enumerable collection of objects from the response. - - An enumerable collection of objects. - - - - Provides methods for parsing the response from an operation to get a range of pages for a page blob. - - - - - Initializes a new instance of the class. - - The stream of page ranges to be parsed. - - - - Parses the XML response for an operation to get a range of pages for a page blob. - - An enumerable collection of objects. - - - - Gets an enumerable collection of objects from the response. - - An enumerable collection of objects. - - - - Describes actions that can be performed on a lease. - - - - - Acquire the lease. - - - - - Renew the lease. - - - - - Release the lease. - - - - - Break the lease. - - - - - Provides methods for parsing the response from a blob listing operation. - - - - - Stores the blob prefix. - - - - - Signals when the blob prefix can be consumed. - - - - - Stores the marker. - - - - - Signals when the marker can be consumed. - - - - - Stores the blob delimiter. - - - - - Signals when the blob delimiter can be consumed. - - - - - Stores the max results. - - - - - Signals when the max results can be consumed. - - - - - Stores the next marker. - - - - - Signals when the next marker can be consumed. - - - - - Initializes a new instance of the class. - - The stream to be parsed. - - - - Parses the response XML for a blob listing operation. - - An enumerable collection of objects that implement . - - - - Gets the listing context from the XML response. - - A set of parameters for the listing operation. - - - - Gets an enumerable collection of objects that implement from the response. - - An enumerable collection of objects that implement . - - - - Gets the Prefix value provided for the listing operation from the XML response. - - The Prefix value. - - - - Gets the Marker value provided for the listing operation from the XML response. - - The Marker value. - - - - Gets the Delimiter value provided for the listing operation from the XML response. - - The Delimiter value. - - - - Gets the MaxResults value provided for the listing operation from the XML response. - - The MaxResults value. - - - - Gets the NextMarker value from the XML response, if the listing was not complete. - - The NextMarker value. - - - - Provides methods for parsing the response from a container listing operation. - - - - - Stores the container prefix. - - - - - Signals when the container prefix can be consumed. - - - - - Stores the marker. - - - - - Signals when the marker can be consumed. - - - - - Stores the max results. - - - - - Signals when the max results can be consumed. - - - - - Stores the next marker. - - - - - Signals when the next marker can be consumed. - - - - - Initializes a new instance of the class. - - The stream to be parsed. - - - - Parses the response XML for a container listing operation. - - An enumerable collection of objects. - - - - Gets the listing context from the XML response. - - A set of parameters for the listing operation. - - - - Gets an enumerable collection of objects from the response. - - An enumerable collection of objects. - - - - Gets the Prefix value provided for the listing operation from the XML response. - - The Prefix value. - - - - Gets the Marker value provided for the listing operation from the XML response. - - The Marker value. - - - - Gets the MaxResults value provided for the listing operation from the XML response. - - The MaxResults value. - - - - Gets the NextMarker value from the XML response, if the listing was not complete. - - The NextMarker value. - - - - Provides methods for parsing the response from a queue listing operation. - - - - - Stores the prefix. - - - - - Signals when the prefix can be consumed. - - - - - Stores the marker. - - - - - Signals when the marker can be consumed. - - - - - Stores the max results. - - - - - Signals when the max results can be consumed. - - - - - Stores the next marker. - - - - - Signals when the next marker can be consumed. - - - - - Initializes a new instance of the class. - - The stream to be parsed. - - - - Parses the response XML for a queue listing operation. - - An enumerable collection of objects. - - - - Gets the listing context from the XML response. - - A set of parameters for the listing operation. - - - - Gets an enumerable collection of objects from the response. - - An enumerable collection of objects. - - - - Gets the Prefix value provided for the listing operation from the XML response. - - The Prefix value. - - - - Gets the Marker value provided for the listing operation from the XML response. - - The Marker value. - - - - Gets the MaxResults value provided for the listing operation from the XML response. - - The MaxResults value. - - - - Gets the NextMarker value from the XML response, if the listing was not complete. - - The NextMarker value. - - - - Enumeration representing the state of logging in a service. - - - - - Logging is disabled. - - - - - Log read operations. - - - - - Log write operations. - - - - - Log delete operations. - - - - - Log all operations. - - - - - Class representing the service properties pertaining to logging. - - - - - Gets or sets the version of the analytics service. - - A string identifying the version of the service. - - - - Gets or sets the state of logging. - - A combination of flags describing the operations that are logged. - - - - Gets or sets the logging retention policy. - - The number of days to retain the logs. - - - - Enumeration representing the state of metrics collection in a service. - - - - - Metrics collection is disabled. - - - - - Service-level metrics collection is enabled. - - - - - Service-level and API metrics collection are enabled. - - - - - Class representing the service properties pertaining to metrics. - - - - - Gets or sets the version of the analytics service. - - A string identifying the version of the service. - - - - Gets or sets the state of metrics collection. - - A value indicating which metrics to collect, if any. - - - - Gets or sets the logging retention policy. - - The number of days to retain the logs. - - - - Describes actions that may be used for writing to a page blob or clearing a set of pages. - - - - - Update the page with new data. - - - - - Clear the page. - - - - - A class to help with parsing. - - - - - Converts a string to UTC time. - - The string to convert. - A UTC representation of the string. - - - - Provides methods for parsing the response from an operation to peek messages from a queue. - - - - - Initializes a new instance of the class. - - The stream to be parsed. - - - - Parses the XML response returned by an operation to get messages from a queue. - - An enumerable collection of objects. - - - - Gets an enumerable collection of objects from the response. - - An enumerable collection of objects. - - - - Represents a block in a block list. - - - - - Initializes a new instance of the class. - - The block ID. - One of the enumeration values that specifies in which block lists to search for the block. - - - - Gets the block ID. - - The block ID. - - - - Gets a value that indicates which block lists to search for the block. - - One of the enumeration values that specifies in which block lists to search for the block. - - - - Represents properties for writing to a page blob. - - - - - Initializes a new instance of the class. - - - - - Gets or sets the range of bytes to write to. - - The page range. - - - - Gets or sets the type of write operation. - - The type of page write operation. - - - - Represents a queue item returned in the XML response for a queue listing operation. - - - - - Initializes a new instance of the class. - - The name of the queue. - The queue's attributes. - - - - Gets the name of the queue. - - The queue name. - - - - Gets the queue's attributes. - - The queue's attributes. - - - - Represents a message retrieved from a queue. - - - - - Initializes a new instance of the class. - - - - - Gets the message expiration time. - - The message expiration time. - - - - Gets the message ID. - - The message ID. - - - - Gets the time the message was added to the queue. - - The message insertion time. - - - - Gets the time the message is next visible. - - The time the message is next visible. - - - - Gets the pop receipt for the message. - - The message's pop receipt. - - - - Gets the text of the message. - - The message text. - - - - Gets the number of times this message has been dequeued. - - The dequeue count. - - - - Provides a set of methods for constructing requests for queue operations. - - - - - Constructs a web request to create a queue. - - The absolute URI to the queue. - The server timeout interval. - A web request for performing the operation. - - - - Constructs a web request to delete a queue. - - The absolute URI to the queue. - The server timeout interval. - A web request for performing the operation. - - - - Constructs a web request to return the user-defined metadata for the queue. - - The absolute URI to the queue. - The server timeout interval. - A web request for performing the operation. - - - - Constructs a web request to set user-defined metadata for the queue. - - The absolute URI to the queue. - The server timeout interval. - A web request for performing the operation. - - - - Signs the request for Shared Key authentication. - - The web request. - The account credentials. - - - - Adds user-defined metadata to the request as one or more name-value pairs. - - The web request. - The user-defined metadata. - - - - Adds user-defined metadata to the request as a single name-value pair. - - The web request. - The metadata name. - The metadata value. - - - - Signs the request for Shared Key Lite authentication. - - The web request. - The account credentials. - - - - Constructs a web request to return a listing of all queues in the storage account. - - The absolute URI to the queue. - The server timeout interval. - A set of parameters for the listing operation. - One of the enumeration values indicating which details to include in the listing. - A web request to use to perform the operation. - - - - Constructs a web request to clear all messages in the queue. - - The absolute URI to the queue. - The server timeout interval. - A web request for the specified operation. - - - - Constructs a web request to delete the specified message. - - The absolute URI to the queue. - The server timeout interval. - The pop receipt value for the message. - A web request for the specified operation. - - - - Constructs a web request to retrieve a specified number of messages. - - The absolute URI to the queue. - The server timeout interval. - The number of messages to retrieve. - The visibility timeout for the message or messages. - A web request for the specified operation. - - - - Constructs a web request to retrieve a specified number of messages without changing their visibility. - - The absolute URI to the queue. - The server timeout interval. - The number of messages to retrieve. - A web request for performing the specified operation. - - - - Generates a web request to add a message to a queue. - - The absolute URI to the queue's messages. - The server timeout interval. - The message time-to-live, or null if no time-to-live is specified. - A web request for the put operation. - - - - Generates a web request to add a message to a queue. - - The absolute URI to the queue's messages. - The server timeout interval, in seconds. - The message time-to-live in seconds. If null, the service default will be used. - The length of time from now during which the message will be invisible, in seconds. - If null, the message will be visible immediately. - A web request for the put operation. - - - - Generates a web request to update a message. - - The absolute URI to the message to update. - The server timeout interval, in seconds. - The pop receipt of the message. - The length of time from now during which the message will be invisible, in seconds. - A web request for the update operation. - - - - Creates a web request to get the properties of the service. - - The absolute URI to the service. - The server timeout interval, in seconds. - A web request to get the service properties. - - - - Creates a web request to set the properties of the service. - - The absolute URI to the service. - The server timeout interval, in seconds. - A web request to set the service properties. - - - - Writes service properties to a stream, formatted in XML. - - The service properties to format and write to the stream. - The stream to which the formatted properties are to be written. - - - - Generates the message request body from a string containing the message. - - The content of the message. - The message request body as an array of bytes. - - - - Creates the web request. - - The absolute URI to the queue. - The server timeout interval. - The query. - A web request for performing the operation. - - - - Provides a set of methods for parsing responses from queue operations. - - - - - Returns extended error information from the storage service, that is in addition to the HTTP status code returned with the response. - - The web response. - An object containing extended error information returned with the response. - - - - Gets a collection of user-defined metadata from the response. - - The web response. - A collection of user-defined metadata, as name-value pairs. - - - - Gets an array of values for a specified name-value pair from a response that includes user-defined metadata. - - The web response. - The name associated with the metadata values to return. - An array of metadata values. - - - - Gets the request ID from the response. - - The web response. - A unique value associated with the request. - - - - Extracts the pop receipt from a web response header. - - The web response. - The pop receipt stored in the header of the response. - - - - Extracts the next visibility time from a web response header. - - The web response. - The time of next visibility stored in the header of the response. - - - - Gets the approximate message count for the queue. - - The web response. - The approximate count for the queue. - - - - Parses the response from an operation to get messages from the queue. - - The stream to parse. - An object that may be used for parsing data from the results of a message retrieval operation. - - - - Parses the response from an operation to get messages from the queue. - - The web response. - An object that may be used for parsing data from the results of a message retrieval operation. - - - - Parses the response for a queue listing operation. - - The response stream. - An object that may be used for parsing data from the results of a queue listing operation. - - - - Parses the response for a queue listing operation. - - The web response. - An object that may be used for parsing data from the results of a queue listing operation. - - - - Parses the response from an operation to peek messages from the queue. - - The stream to parse. - An object that may be used for parsing data from the results of a message peeking operation. - - - - Parses the response from an operation to peek messages from the queue. - - The web response. - An object that may be used for parsing data from the results of a message peeking operation. - - - - Reads service properties from a stream. - - The stream from which to read the service properties. - The service properties stored in the stream. - - - - Factory class for creating requests internally. - - - - - Internal override for the storage version string. - - - - - Initializes static members of the Request class. - - - - - Creates the web request. - - The request Uri. - The timeout. - The builder. - A web request for performing the operation. - - - - Creates the specified Uri. - - The Uri to create. - The timeout. - The builder. - A web request for performing the operation. - - - - Deletes the specified Uri. - - The Uri to delete. - The timeout. - The builder. - A web request for performing the operation. - - - - Gets the metadata. - - The blob Uri. - The timeout. - The builder. - A web request for performing the operation. - - - - Gets the properties. - - The Uri to query. - The timeout. - The builder. - A web request for performing the operation. - - - - Sets the metadata. - - The blob Uri. - The timeout. - The builder. - A web request for performing the operation. - - - - Creates a web request to get the properties of the service. - - The absolute URI to the service. - The server timeout interval. - A web request to get the service properties. - - - - Creates a web request to set the properties of the service. - - The absolute URI to the service. - The server timeout interval. - A web request to set the service properties. - - - - Writes service properties to a stream, formatted in XML. - - The service properties to format and write to the stream. - The stream to which the formatted properties are to be written. - - - - Generates a query builder for building service requests. - - A for building service requests. - - - - Signs the request appropriately to make it an authenticated request for Blob and Queue. - - The request. - The credentials. - - - - Signs requests using the SharedKey authentication scheme for the table storage service. - - The request. - The credentials. - - - - Adds the metadata. - - The request. - The metadata. - - - - Adds the metadata. - - The request. - The metadata name. - The metadata value. - - - - Signs requests using the SharedKeyLite authentication scheme with is used for the table storage service. - - The request. - The credentials. - - - - Signs requests using the SharedKeyLite authentication scheme with is used for the table storage service. - Currently we only support for table. - - The request. - The credentials. - - - - Adds the lease id. - - The request. - The lease id. - - - - Adds the optional header. - - The web request. - The metadata name. - The metadata value. - - - - Adds the conditional. - - The request. - The header. - The resource ETag. - - - - Adds the conditional. - - The request. - The header. - The date time. - - - - Creates a standard datetime string for the shared key lite authentication scheme. - - DateTime value to convert to a string in the expected format. - The converted DateTime. - - - - Gets the target version. - - The target version. - - - - Converts the date time to snapshot string. - - The date time. - The converted string. - - - - This gets the file version, but fails under partial trust with a security exception. - The caller should catch the exception. - - File version of current assembly. - - Inlining of this fuction is explicitly disabled to support degrading gracefully under partial trust. - FileVersionInfo.GetVersionInfo has a link demand assoicated with it. Therefore, we must make - sure we never inline this function, otherwise the caller cannot catch the security - exception associated with the link demand. - - - - - Gets or sets the user agent to send over the wire to identify the client. - - - - - The exception that is thrown if the client attempts to parse the response a second time. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message that describes the exception. - - - - Initializes a new instance of the class. - - The message for the exception. - The exception that is the cause of the current exception. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - - - Implements the common parsing between all the responses. - - - - - Gets the error details from the response object. - - The response from server. - An extended error information parsed from the input. - - - - Gets the headers (metadata or properties). - - The response from sever. - A of all the headers. - - - - Gets the user-defined metadata. - - The response from server. - A of the metadata. - - - - Gets a specific user-defined metadata. - - The response from server. - The metadata header requested. - An array of the values for the metadata. - - - - Parses the metadata. - - The reader. - A of metadata. - - Precondition: reader at <Metadata> - Postcondition: reader after </Metadata> (<Metadata/> consumed) - - - - - Gets the storage properties. - - The response from server. - A of the properties. - - - - Gets a specific storage property. - - The response from server. - The property requested. - An array of the values for the property. - - - - Gets the request id. - - The response from server. - The request ID. - - - - Reads service properties from a stream. - - The stream from which to read the service properties. - The service properties stored in the stream. - - - - Gets the metadata or properties. - - The response from server. - The prefix for all the headers. - A of the headers with the prefix. - - - - Class representing a set of properties pertaining to a cloud storage service. - - - - - The name of the root XML element. - - - - - The name of the logging XML element. - - - - - The name of the metrics XML element. - - - - - The name of the version XML element. - - - - - The name of the delete operation XML element. - - - - - The name of the read operation XML element. - - - - - The name of the write operation XML element. - - - - - The name of the retention policy XML element. - - - - - The name of the enabled XML element. - - - - - The name of the days XML element. - - - - - The name of the include APIs XML element. - - - - - The name of the default service version XML element. - - - - - Initializes a new instance of the ServiceProperties class. - - - - - Constructs a ServiceProperties object from an XML document received from the service. - - The XML document. - A ServiceProperties object containing the properties in the XML document. - - - - Converts these properties into XML for communicating with the service. - - An XML document containing the service properties. - - - - Generates XML representing the given retention policy. - - The number of days to retain, or null if the policy is disabled. - An XML retention policy element. - - - - Generates XML representing the given metrics properties. - - The metrics properties. - An XML metrics element. - - - - Generates XML representing the given logging properties. - - The logging properties. - An XML logging element. - - - - Constructs a LoggingProperties object from an XML element. - - The XML element. - A LoggingProperties object containing the properties in the element. - - - - Constructs a MetricsProperties object from an XML element. - - The XML element. - A MetricsProperties object containing the properties in the element. - - - - Constructs a retention policy (number of days) from an XML element. - - The XML element. - The number of days to retain, or null if retention is disabled. - - - - Gets or sets the logging properties. - - The logging properties. - - - - Gets or sets the metrics properties. - - The metrics properties. - - - - Gets or sets the default service version. - - The default service version identifier. - - - - Provides an implementation of the class for requests against - the Table service under the Shared Key authentication scheme. - - - - - Canonicalizes the HTTP request. - - The web request. - The name of the storage account. - The canonicalized string for the request. - - - - Provides an implementation of the class for blobs and queues - for use with the Shared Key Lite authentication scheme. - - - - - Canonicalizes the HTTP request. - - A web request. - The name of the storage account. - The canonicalized string for the request. - - - - Provides an implementation of the class for tables - for the Shared Key Lite authentication scheme. - - - - - Canonicalizes the HTTP request. - - A web request. - The name of the storage account. - The canonicalized string for the request. - - - - Provides an implementation of the class for requests against - the Table service under the Shared Key authentication scheme. - - - - - Canonicalizes the HTTP request. - - A web request. - The name of the storage account. - The canonicalized string for the request. - - - - Container for storage key. - - - May eventually use native APIs to keep key pinned and not memory. - - - - - Initializes a new instance of the class. - - The storage key. - - - - Computes the mac sha256. - - The storage key. - The canonicalized string. - The computed hash. - - - - Computes the mac sha512. - - The storage key. - The canonicalized string. - The computed hash. - - - - Gets the base64 encoded key. - - The base64 encoded key. - - - - Gets the key. - - The storage key. - - - - Gets or sets the key. - - The storage key. - - - - Provides a set of methods for constructing requests for table operations. - - - - - Creates a web request to get the properties of the service. - - The absolute URI to the service. - The server timeout interval, in seconds. - A web request to get the service properties. - - - - Creates a web request to set the properties of the service. - - The absolute URI to the service. - The server timeout interval, in seconds. - A web request to set the service properties. - - - - Writes service properties to a stream, formatted in XML. - - The service properties to format and write to the stream. - The stream to which the formatted properties are to be written. - - - - Signs the request for Shared Key authentication. - - The web request. - The account credentials. - The table service usually expects requests to use Shared Key Lite authentication. - Use for those requests. - - - - Signs the request for Shared Key Lite authentication. - - The web request. - The account credentials. - - - - Provides a set of methods for parsing responses from table operations. - - - - - Returns extended error information from the storage service, that is in addition to the HTTP status code returned with the response. - - The web response. - An object containing extended error information returned with the response. - - - - Gets the request ID from the response. - - The web response. - A unique value associated with the request. - - - - Reads service properties from a stream. - - The stream from which to read the service properties. - The service properties stored in the stream. - - - - A style class for creating Uri query strings. - - - - - Stores the query parameters. - - - - - Add the value with Uri escaping. - - The query name. - The query value. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Add query parameter to an existing Uri. This takes care of any existing query parameters in the Uri. - - Original Uri which may contain query parameters already. - The appended Uri. - - - - Represents a queue's attributes. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The attributes to clone. - - - - Gets the queue's user-defined metadata. - - The queue's user-defined metadata. - - - - Gets the URI for the queue. - - The queue's URI. - - - - Provides error code strings that are specific to the Queue service. - - - - - Error code that may be returned when the specified queue was not found. - - - - - Error code that may be returned when the specified queue is disabled. - - - - - Error code that may be returned when the specified queue already exists. - - - - - Error code that may be returned when the specified queue is not empty. - - - - - Error code that may be returned when the specified queue is being deleted. - - - - - Error code that may be returned when the specified pop receipt does not match. - - - - - Error code that may be returned when one or more request parameters are invalid. - - - - - Error code that may be returned when the specified message was not found. - - - - - Error code that may be returned when the specified message is too large. - - - - - Error code that may be returned when the specified marker is invalid. - - - - - Specifies which details to include when listing queues in this storage account. - - - - - No additional details. - - - - - Retrieve queue metadata. - - - - - Retrieve all available details. - - - - - Utility functions that does the heavy lifting of carrying out retries on a IRetrayableRequest. - - - Both synchrous and asynchrous request styles are supported. - They are used to implement the corresponding XXX, BeginXXX, EndXXX calls where XXX - is something like GetBlobInfo. - State passing for return value in the sync call (GetBlobInfo) and out parameters for the async calls - (EndBlobInfo) is achieved by member variables in the implementation class of IRetryableRequest. - - - - - Synchronouses the request with retry. - - The result type of the task. - The oracle to use. - The task implementation. - The result of the task. - - - - Begins the asynchronous request with retry. - - The result type of the task. - The oracle to use. - The task implementation. - The asynchronous callback. - The asynchronous state. - An that represents the asynchronous operation. - - - - Ends the asynchronous request with retry. - - The result type of the task. - The asynchronous result. - The result of the completed task. - - - - Implementation of the *RequestWithRetry methods. - - The result type of the task. - The retry oracle. - The task implementation. - The result report delegate. - A that performs the request with retries. - - - - Implementation of the *RequestWithRetry methods. - - The result type of the task. - The retry oracle. - The task implementation. - A that performs the request with retries. - - - - Provides the arguments for the ResponseReceived event. - - - - - Gets the request ID. - - The request ID. - - - - Gets the request headers. - - The collection of request headers. - Modifying the collection of request headers may result in unexpected behavior. - - - - Gets the request URI. - - The request URI. - - - - Gets the response headers. - - The collection of response headers. - Modifying the collection of response headers may result in unexpected behavior. - - - - Gets the HTTP status code for the request. - - The HTTP status code for the request. - - - - Gets the status description for the request. - - The status description for the request. - - - - Gets an exception returned by the service. - - The exception returned by the service. - - - - Manage continuation information for various listing operation. - Can be serialized using XmlSerialization. - - - - - XML element for the next marker. - - - - - XML element for the next partition key. - - - - - XML element for the next row key. - - - - - XML element for the next table name. - - - - - XML element for the token version. - - - - - Stores the current token version value. - - - - - XML element for the token type. - - - - - Initializes a new instance of the class. - - - - - Gets an XML representation of an object. - - - An that describes the XML representation of the object that is produced by the method and consumed by the method. - - - - - Generates a serializable continuation token from its XML representation. - - The stream from which the continuation token is deserialized. - - - - Converts a serializable continuation token into its XML representation. - - The stream to which the continuation token is serialized. - - - - Gets or sets the NextPartitionKey for TableServiceEntity enumeration operations. - - - - - Gets or sets the NextRowKey for TableServiceEntity enumeration operations. - - The next row key. - - - - Gets or sets the NextTableName for Table enumeration operations. - - The name of the next table. - - - - Gets or sets the NextMarker for continuing results for CloudBlob and CloudBlobContainer and CloudQueue enumeration operations. - - The next marker. - - - - Gets a value indicating whether there is continuation information present. - - - - - - Gets or sets the type. - - The continuation type. - - - - Specifies the type of a continuation token. - - - - - Default for no continuation. - - - - - The token is a blob listing continuation token. - - - - - The token is a queue listing continuation token. - - - - - The token is a container listing continuation token. - - - - - The token is a table query continuation token. - - - - - Represents a class which manages pagination of results. - - - - - Stores the results remaining in the current page. - - - - - Stores the page size. - - - - - Initializes a new instance of the class. - - Number of results to be returned as a page. - maxResults of 0 or less means no paging. - - - - Gets the size for next request to pass in parameter like MaxResults. - - Postive value indicating size of a result page if using paging. - Else null is returned. - - - - Update pagination paramters for new result set returned. - - The current result count. - - - - Gets the maxResults in use for the current Pagination instance - Returns zero if paging is not in use. - - The size of the effective page. - - - - Gets a value indicating whether paging is enabled with a valid postive page size. - An instance with a non positive page size will return false. - - - - - Gets a value indicating whether there are no more remaining results in the current page. - Will return false if paging is not enabled. - - - - - Represents a result segment that was retrieved from the total set of possible results. - - The type of the element. - - - - Stores the continuation token used to retrieve the next segment of results. - - - - - Stores the closure used to retrieve the next set of results. - - - - - Stores the used for requests. - - - - - Initializes a new instance of the ResultSegment class. - - The result. - If set to true there are more results. - The next result segment. - The retry policy. - - - - Begins an asynchronous operation to retrieve the next result segment. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to retrieve the next result segment. - - An that references the pending asynchronous operation. - The next result segment. - - - - Gets the next result segment. - - The next result segment. - - - - Implementation of GetNext (For symmetry with normal tasks. - - The action to set the results. - A representing the operation to get the next set of results. - - - - Gets an enumerable collection of results. - - An enumerable collection of results. - - - - Gets a value indicating whether there are additional results to retrieve. - - True if there are additional results; otherwise, false. - - - - Gets a continuation token to use to retrieve the next set of results with a subsequent call to the operation. - - The continuation token. - - - - Gets or sets the pagination information for Results. - - The pagination. - - - - Gets the retry policy. - - The retry policy. - - - - Represents a helper class to support additional operations on ResultSegments - such as grouping of results into pages. - - - - - Checks if the result segment has more results in the current page if pagination is used. - If pagination is not used, it checks if a valid continuation is present. - - The pagination. - The continuation token. - - Returns true if there are more results in the page; otherwise, false. - - - - - Create a result segment from the result result. - - The type of the result. - The set result. - The result list. - The continuation token. - The pagination. - The retry policy. - The continuation function. - - - - Checks if the result segment passed in has a valid continuation token. - - The continuation. - - Returns true if the specified continuation has continuation; otherwise, false. - - - - - Defines some standard retry policies. - - - - - Indicates the default minimum backoff value that will be used for a policy returned by . - - - - - Indicates the default maximum backoff value that will be used for a policy returned by . - - - - - Indicates the default client backoff value that will be used by a service client, if no other retry policy has been specified. - - - - - Indicates the default retry count that will be used by a service client, if no other retry policy has been specified. - - - - - Returns a retry policy that performs no retries. - - The retry policy. - - - - Returns a retry policy that retries a specified number of times, with a specified fixed time interval between retries. - - A non-negative number indicating the number of times to retry. - The time interval between retries. Use to specify that the operation - should be retried immediately. - The retry policy. - - - - Returns a policy that retries a specified number of times with a randomized exponential backoff scheme. - - A non-negative number indicating the number of times to retry. - The multiplier in the exponential backoff scheme. - The retry policy. - - - - Returns a policy that retries a specified number of times with a randomized exponential backoff scheme. - - A non-negative number indicating the number of times to retry. - The minimum backoff interval. - The maximum backoff interval. - The multiplier in the exponential backoff scheme. - The retry policy. - - - - Returns a delegate that implements a custom retry policy. - - A delegate that determines whether or not to retry an operation. - - - - Specifies the set of possible permissions for a shared access policy. - - - - - No shared access granted. - - - - - Read access granted. - - - - - Write access granted. - - - - - Delete access granted for blobs. - - - - - List access granted. - - - - - Represents the collection of shared access policies defined for a container. - - - - - Represents a shared access policy, which specifies the start time, expiry time, - and permissions for a shared access signature. - - - - - Initializes a new instance of the class. - - - - - Converts the permissions specified for the shared access policy to a string. - - The shared access permissions. - The shared access permissions in string format. - - - - Constructs a object from a permissions string. - - The shared access permissions in string format. - A set of shared access permissions. - - - - Gets or sets the start time for a shared access signature associated with this shared access policy. - - The shared access start time. - - - - Gets or sets the expiry time for a shared access signature associated with this shared access policy. - - The shared access expiry time. - - - - Gets or sets the permissions for a shared access signature associated with this shared access policy. - - The permissions. - - - - Determines whether a request should be retried. - - The number of times the request has been retried. - The exception raised by the most recent operation. - An optional delay that specifies how long to wait before retrying a request. - true if the request should be retried; otherwise, false. - - - - This class provides MemoryStream-like behavior but uses a list of blocks rather than a single piece of bufferBlocks. - - - - - The default block size. - - - - - The size of the block. - - - - - The underlying bufferBlocks for the stream. - - - - - The currently used length. - - - - - The total capacity of the stream. - - - - - The current position. - - - - - Initializes a new instance of the SmallBlockMemoryStream class with default 64KB block size and no reserved space. - - - - - Initializes a new instance of the SmallBlockMemoryStream class with provided block size and no reserved space. - - The size of blocks to use. - - - - Initializes a new instance of the SmallBlockMemoryStream class. - - The size of blocks to use. - The amount of memory to reserve. - Thrown if is zero or negative. - - - - Copies the specified amount of data from internal buffers to the buffer and advances the position. - - An array of bytes. When this method returns, the buffer contains the specified byte array with the values - between offset and (offset + count - 1) replaced by the bytes read from the current source. - The zero-based byte offset in buffer at which to begin storing the data read from the current stream. - The maximum number of bytes to be read from the current stream. - The total number of bytes read into the buffer. This can be less than the number of bytes requested - if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. - - The offset subtracted from the buffer length is less than count. - The buffer is null. - The offset or count is negative. - - - - Sets the position within the current stream. - - A byte offset relative to the origin parameter. - A value of type System.IO.SeekOrigin indicating the reference point used to obtain the new position. - The new position within the current stream. - Thrown if is invalid for SeekOrigin. - - - - Sets the length of the current stream. (preallocating the bufferBlocks). - - The desired length of the current stream in bytes. - If the is negative. - - - - Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - - An array of bytes. This method copies count bytes from buffer to the current stream. - The zero-based byte offset in buffer at which to begin copying bytes to the current stream. - The number of bytes to be written to the current stream. - Offset subtracted from the buffer length is less than count. - Thrown if is null - Thrown if or is negative - - - - Does not perform any operation as it's an in-memory stream. - - - - - Ensures that the amount of bufferBlocks is greater than or equal to the required size. - Does not trim the size. - - The required size. - If the is negative. - - - - Adds another block to the underlying bufferBlocks. - - - - - Copies the specified amount of data from internal buffers to the buffer and advances the position. - - An array of bytes. When this method returns, the buffer contains the specified byte array with the values - between offset and (offset + count - 1) replaced by the bytes read from the current source. - The zero-based byte offset in buffer at which to begin storing the data read from the current stream. - The maximum number of bytes to be read from the current stream. - The total number of bytes read into the buffer. This can be less than the number of bytes requested - if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. - - - - - Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - (Requires the stream to be of sufficient size for writing). - - An array of bytes. This method copies count bytes from buffer to the current stream. - The zero-based byte offset in buffer at which to begin copying bytes to the current stream. - The number of bytes to be written to the current stream. - - - - Advances the current position of the stream and adjust the offset and remainder based on the amount completed. - - The current offset in the external buffer. - The amount of data left to process. - The amount of data processed. - - - - Calculate the block for the current position. - - The position within a block. - The block reference itself. - - - - Gets a value indicating whether the current stream supports reading. - - Is true if the stream supports reading; otherwise, false. - - - - Gets a value indicating whether the current stream supports seeking. - - Is true if the stream supports seeking; otherwise, false. - - - - Gets a value indicating whether the current stream supports writing. - - Is true if the stream supports writing; otherwise, false. - - - - Gets the currently written length. - - - - - Represents the current position in the stream. - - Thrown if position is outside the stream size - - - - Represents an exception thrown by the Windows Azure storage client library. - - - - - The base class for Windows Azure storage service exceptions. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The storage client error code. - The message that describes the exception. - The HTTP status code returned in the response. - The extended error information. - The instance that caused the current exception. - - - - Initializes a new instance of the class with - serialized data. - - The object that contains serialized object - data about the exception being thrown. - The object that contains contextual information - about the source or destionation. - - - - Sets the object with additional exception information. - - The object that contains serialized data about the exception being thrown. - The object that contains contextual information - about the source or destination. - - - - Gets the HTTP status code that was returned by the service. - - The HTTP status code. - - - - Gets the specific error code returned by the service. - - The storage error code. - - - - Gets the extended error information returned by the service. - - The extended error information. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The storage client error code. - The message that describes the exception. - The HTTP status code returned in the response. - The extended error information. - The instance that caused the current exception. - - - - Initializes a new instance of the class with - serialized data. - - The object that contains serialized data about the exception being thrown. - The object that contains contextual information - about the source or destination. - - - - Describes error codes that may be returned by the Windows Azure storage services or the storage client library. - - - - - No error specified. - - - - - An internal server occurred (server-side error). - - - - - The service timed out (server-side error). - - - - - A service integrity check failed (server-side error). - - - - - A transport error occurred (server-side error). - - - - - The service returned a bad response (server-side error). - - - - - The specified resource was not found (client-side error). - - - - - The specified account was not found (client-side error). - - - - - The specified container was not found (client-side error). - - - - - The specified blob was not found (client-side error). - - - - - An authentication error occurred (client-side error). - - - - - Access was denied (client-side error). - - - - - The specified resource already exists (client-side error). - - - - - The specified container already exists (client-side error). - - - - - The specified blob already exists (client-side error). - - - - - The request was incorrect or badly formed (client-side error). - - - - - The specified condition failed (client-side error). - - - - - There was an error with the gateway used for the request (client-side error). - - - - - The requested operation is not implemented on the specified resource (client-side error). - - - - - The request version header is not supported (client-side error). - - - - - Provides error code strings that are common to all storage services. - - - - - The specified HTTP verb is not supported. - - - - - The Content-Length header is required for this request. - - - - - A required header was missing. - - - - - A required XML node was missing. - - - - - One or more header values are not supported. - - - - - One or more XML nodes are not supported. - - - - - One or more header values are invalid. - - - - - One or more XML node values are invalid. - - - - - A required query parameter is missing. - - - - - One or more query parameters is not supported. - - - - - One or more query parameters are invalid. - - - - - One or more query parameters are out of range. - - - - - The URI is invalid. - - - - - The HTTP verb is invalid. - - - - - The metadata key is empty. - - - - - The request body is too large. - - - - - The specified XML document is invalid. - - - - - An internal error occurred. - - - - - Authentication failed. - - - - - The specified MD5 hash does not match the server value. - - - - - The specified MD5 hash is invalid. - - - - - The input is out of range. - - - - - The input is invalid. - - - - - The operation timed out. - - - - - The specified resource was not found. - - - - - The specified metadata is invalid. - - - - - The specified metadata is too large. - - - - - The specified condition was not met. - - - - - The specified range is invalid. - - - - - The specified container was not found. - - - - - The specified container already exists. - - - - - The specified container is disabled. - - - - - The specified container is being deleted. - - - - - The server is busy. - - - - - Provides a set of extensions for translating Exceptions into StorageExceptions. - - - - - Translates a WebException into the corresponding StorageException. - - The exception to translate. - The translated exception. - - - - Translates the data service client exception. - - The exception to translate. - The translated exception. - - - - Represents extended error information returned by the Windows Azure storage services. - - - - - Gets the storage service error code. - - The storage service error code. - - - - Gets the storage service error message. - - The storage service error message. - - - - Gets additional error details. - - The additional error details. - - - - Represents an exception thrown due to a server-side error. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The storage client error code. - The message that describes the exception. - The HTTP status code returned in the response. - The instance that caused the current exception. - - - - Initializes a new instance of the class. - - The storage client error code. - The message that describes the exception. - The HTTP status code returned in the response. - The extended error information. - The instance that caused the current exception. - - - - Initializes a new instance of the class with - serialized data. - - The object that contains serialized data about the exception being thrown. - The object that contains contextual information - about the source or destination. - - - - A class containing common functionality across the two blob streams. - - - - - Verifies the parameters to a read/write operation. - - An array of bytes. - The zero-based byte offset in . - The maximum number of bytes to be access in . /// The sum of offset and count is greater than the buffer length. - is null. - offset or count is negative. - - - - Calculates an ongoing hash. - - The data to calculate the hash on. - The offset in the input buffer to calculate from. - The number of bytes to use from input. - The hash algorithm to use. - - - - Retrieves the string representation of the hash. (Completes the creation of the hash). - - The hashing object. - A string that is the content of the hash. - - - - Provides error code strings that are specific to the Windows Azure Table service. - - - - - The request uses X-HTTP-Method with an HTTP verb other than POST. - - - - - The specified X-HTTP-Method is invalid. - - - - - More than one X-HTTP-Method is specified. - - - - - The specified table has no properties. - - - - - A property is specified more than once. - - - - - The specified table has no such property. - - - - - A duplicate key property was specified. - - - - - The specified table already exists. - - - - - The specified table was not found. - - - - - The specified entity was not found. - - - - - The specified entity already exists. - - - - - The partition key was not specified. - - - - - One or more specified operators are invalid. - - - - - The specified update condition was not satsified. - - - - - All properties must have values. - - - - - The partition key property cannot be updated. - - - - - The entity contains more properties than allowed. - - - - - The entity is larger than the maximum size permitted. - - - - - The property value is larger than the maximum size permitted. - - - - - One or more value types are invalid. - - - - - The specified table is being deleted. - - - - - The Table service server is out of memory. - - - - - The type of the primary key property is invalid. - - - - - The property name exceeds the maximum allowed length. - - - - - The property name is invalid. - - - - - Batch operations are not supported for this operation type. - - - - - JSON format is not supported. - - - - - The specified method is not allowed. - - - - - The specified operation is not yet implemented. - - - - - Represents a object for use with the Windows Azure Table service. - - - - - Initializes a new instance of the class. - - The Table service endpoint to use create the service context. - The account credentials. - - - - Begins an asynchronous operation to save changes, using the retry policy specified for the service context. - - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Begins an asynchronous operation to save changes, using the retry policy specified for the service context. - - Additional options for saving changes. - The callback delegate that will receive notification when the asynchronous operation completes. - A user-defined object that will be passed to the callback delegate. - An that references the asynchronous operation. - - - - Ends an asynchronous operation to save changes. - - An that references the pending asynchronous operation. - A that represents the result of the operation. - - - - Saves changes, using the retry policy specified for the service context. - - A that represents the result of the operation. - - - - Saves changes, using the retry policy specified for the service context. - - Additional options for saving changes. - A that represents the result of the operation. - - - - Saves the changes with retries implementation. - - The options for saving changes. - The action to set result. - A sequence of tasks to perform the operation. - - - - Callback on DataContext object sending request. - - The sender. - The instance containing the event data. - - - - Gets or sets the retry policy requests made via the service context. - - The retry policy. - - - - Gets the storage account credentials used by the service context. - - The account credentials. - - - - Represents an entity in the Windows Azure Table service. - - - - - Initializes a new instance of the class. - - The partition key. - The row key. - - - - Initializes a new instance of the class. - - - - - Gets or sets the timestamp for the entity. - - The entity's timestamp. - - - - Gets or sets the partition key of a table entity. - - The partition key. - - - - Gets or sets the row key of a table entity. - - The row key. - - - - Provides a set of extensions for the Table service. - - - - - Converts the query into a object that supports - additional operations like retries. - - The type of the element. - The query. - The converted query. - - - - Internal table service entity for creating tables. - - - - - Stores the table name. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - The name of the table. - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - Returns true if the specified is equal to this instance; otherwise, false. - - - The parameter is null. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Gets or sets the table name. - - The name of the table. - - - - Helper functions for table service. - - - - - Determines whether the type is an entity type. - - The type to check. - Type of the context. - - Returns true if the type is an entity type; otherwise, false. - - - - - Determines whether the specified property is a key column. - - The property. - - Returns true if the specified property is a key column; otherwise, false. - - - - - Enumerates the entity set properties. - - Type of the context. - A list of the entity set properties. - - - - Enumerates the entity set names. - - Type of the context. - A list of entity set names. - - - - Checks the name of the table. - - The table name. - Name of the arg. - - - - Implementation helper for task sequences. - - - - - Executes the impl. - - The result type. - The task implementation. - The result of the task. - - - - Begins the impl. - - The result type. - The task implementation. - The callback. - The state. - An asynchronous result representing the operation. - - - - Ends the impl. - - The result type. - The async result. - The task result. - - - - Executes the impl. - - The task implemenetaion. - - - - Begins the impl. - - The task implementation. - The callback. - The state. - An asynchronous result representing the operation. - - - - Ends the impl. - - The async result. - - - - Executes the impl with retry. - - The result type. - The task implementation. - The policy. - The task result. - - - - Begins the impl with retry. - - The result type. - The task implementation. - The policy. - The callback. - The state. - An asynchronous result representing the operation. - - - - Ends the impl with retry. - - The result type. - The async result. - The task result. - - - - Executes the impl with retry. - - The task implementation. - The policy. - - - - Executes the impl with retry. - - The result type. - The task implementation. - The task result. - - - - Executes the impl with retry. - - The result type. - The task implementation. - The policy. - The task result. - - - - Begins the impl with retry. - - The task implementation. - The policy. - The callback. - The state. - An asynchronous result representing the operation. - - - - Ends the impl with retry. - - The async result. - - - - Gets the retryable async task. - - The result type. - The task implementation. - The policy. - The retryable task. - - - - Gets the retryable async task. - - The task implementation. - The policy. - The retryable task. - - - - Gets the task from async result. - - The type of the result. - The async result. - The asynchronous result. - - - - A task that implements the conventional BeginXX(), EndXX() pattern. - - - - - A task that implements the conventional BeginXX(), EndXX() pattern. - - The return type of the task. - - - - Represents an asynchronous computation that yields a result of type T. - - The type of the result of the operation. - - By this contract we: - 1) guarantee that the completion routine is performed, regardless of the outcome of ExecuteStep. - 2) insist that the completion routine does not throw an exception. - 3) insists that the abort routine does not throw an exception. - - - - - An asynchronous computation. - - - - - Perform the next async step. - - The action to be performed on completion. - - - - Abort the task operation. - - - - - Gets a value indicating whether the task has completed synchronously. - - - Is true if completed synchronously; otherwise, false. - - - - - Gets exception raised by this task (if any). - - The exception. - - - - Provides information if the task completed synchronously and therefore on the main thread. - - - - - Contains any exceptions raised by the task. - - - - - The action to call once the operation is completed. - - - - - The result of the operation. - - - - - Executes the tasks and waits for the result. - - The result of the operation. - - - - Executes a task, will not wait on a sync task. - - The result of the operation. - - - - Executes a single step of the task. (Delegates to the concrete implemetation for specific step). - - The completion function to be called. - - - - Implements an abort routine that fulfills the contract. - - - - - The specific implementation of the task's step. - - - - - Implements a safe way to obtain the result. - - The function used to get the result value. - - - - The task-specific abort that should be called. - - - - - The completion return that needs to be called whenever operation completes. - - Whether the underlying operation completed synchrnously. - - - - Gets or sets the result of the operation and throws any exceptions raised by the operation. - - - - - Gets or sets a value indicating whether the operation was completed synchronously and therefore on main thread. - - - - - Gets or sets any exceptions raised during execution. - - - - - Gets or sets a value indicating whether the task is completed. - - - - - Initializes a new instance of the APMTask class for use with normal APM. - - The APM function to begin operation. - The APM functon to end the operation. - - - - Initializes a new instance of the APMTask class for use with normal APM. - - The APM function to begin operation. - The APM functon to end the operation. - The function used for aborting an operation. - - - - Implementation of the library execution. Performs the APM operation. - - - - - Implements the abort functionality. - - - - - Callback for the APM function. - - The async result for the APM model. - - - - Gets or sets the begin function. - - The begin func. - - - - Gets or sets the end function. - - The end func. - - - - Gets or sets the abort function. - - The abort func. - - - - Initializes a new instance of the APMTask class for sequence without any return value. - - The APM function to begin operation. - The APM functon to end the operation. - - - - A class to extend a normal task. - - - - - Converts a Task to an a TaskAsyncResult to allow for exposing Tasks as IAsyncResult. - - The return type of the task. - The task to be converted. - The callback to be called at the end of the task. - The callback's state. - A TaskAsyncResult that implements IAsyncResult. - - - - Converts a Task to an a TaskAsyncResult to allow for exposing Tasks as IAsyncResut. - - The task to be converted. - The callback to be called at the end of the task. - The callback's state. - A TaskAsyncResult that implements IAsyncResult. - - - - A task class that implements a fixed delay. - - - - - Indicates whether this object has been disposed. - - - - - Stores the length of the delay. - - - - - ObjectUsed to lock disposing methods and timer callbacks. - - - - - Stores the native timer used to trigger after the specified delay. - - - - - Initializes a new instance of the class. - - Should be between TimeSpan.Zero and TimeSpan.MaxValue. - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Releases unmanaged and - optionally - managed resources. - - Set to true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - The specific implementation of the task's step. - - - - - The task-specific abort that should be called. - - - - - Begins the delay. - - - - - Ends the delay. - - - - - Invokes a sequence with no return value. - - - - - Invokes a sequence of tasks. - - The type of the result of the operation. - - - - Contains the function that generates a squence of tasks to be invoked. - - - - - The current task that is being invoked. - - - - - Controls whether the abort was called. - - - - - Initializes a new instance of the InvokeTaskSequenceTask class with a task sequence that returns a value. - - The sequence of actions to be invoked. - - - - Implements the abort logic by aborting the current task. - - - - - The starting point for executing a task sequence. - - - - - Executes a task sequence by iterating over all of the items and executing them. - - The sequence of tasks to execute. - Whether the sequence so far has completed synchronously. - - - - Initializes a new instance of the InvokeTaskSequenceTask class for sequence without any return value. - - The sequence of actions to be invoked. - - - - A NullTaskReturn type. - - - - - Represents a no-return from a task. - - - - - Prevents a default instance of the class from being created. - - - - - Facilitates a scenario where numerous simultaneous tasks are active, and only the first to complete should continue. - - The type of the result of the operation. - - - - Stores the abort flag. - - - - - Stores the racing tasks. - - - - - Initializes a new instance of the class. - - The tasks. - - - - The specific implementation of the task's step. - - - - - The task-specific abort that should be called. - - - - - Called when complete. - - The winning task. - - - - Provides extensions for the stream object to support asynchronous operations. - - - - - Buffer size needs to be page-aligned. - - - - - Asynchronously reads data from a stream using BeginRead. - - The stream on which the method is called. - The buffer to read the data into. - Byte offset in the buffer. - Maximum number of bytes to read. - Returns non-zero if there are still some data to read. - - - - Reads asynchronously the entire content of the stream and returns it - as a string using StreamReader. - - The stream on which the method is called. - The text encoding used for converting bytes read into string. - The action to be performed with the resulting string. - Returns a task sequence that must be performed to get result string using the 'Result' callback. - - - - Asynchronously writes data from a stream using BeginWrite. - - The stream on which the method is called. - The buffer to write the data from. - Byte offset in the buffer. - Maximum number of bytes to write. - A task with no return value. - - - - Reads asynchronously the entire content of the stream and writes it to the given output stream. - - The origin stream. - The destination stream. - The sequence that when invoked results in an asynchronous copy. - - - - Compute the MD5 hash of the stream. - - The stream. - A delegate for setting the resulting MD5 hash as a string. - The sequence that when invoked results in an asynchronous MD5 computation. - - - - Reads synchronously the entire content of the stream and writes it to the given output stream. - - The origin stream. - The destination stream. - - - - Reads asynchronously the entire content of the stream and writes it to the given output stream. - Closes the output stream at the end. - - The origin stream. - The destination stream. - The sequence that when invoked results in an asynchronous copy. - - - - A task that obtains a result synchronously. - - - - - A task that obtains a result synchronously. - - The type of the result of the operation. - - - - The function to be executed. - - - - - Initializes a new instance of the SynchronousTask class. - - The function to execute. - - - - Performs the task and marks it as completed. - - - - - Implements abort as NoOp. - - - - - Initializes a new instance of the SynchronousTask class. - - The function to execute. - - - - A set of extension methods for table service classes. - - - - - Converts a DataServiceQuery execution into an APMTask. - - The result type of the query. - The query to convert. - The wrapped task. - - - - Converts the SaveChanges method into an APMTask. - - The target context. - The wrapped task. - - - - Converts the SaveChanges method to an APMTask. - - The target context. - The options to pass to SaveChanges. - A task that saves changes asynchronously. - - - - Gets the unexpected internal client error wrapped task. - - The result type. - The timeout. - The original task. - The wrapped task. - - - - Gets the unexpected internal client error task sequence. - - The result type. - The timeout. - The set result. - A for the unexpected error. - - - - An implementation of IAsyncResult that encapsulates a task. - - The type of the resulting value. - Refer to http://csdweb/sites/oslo/engsys/DesignGuidelines/Wiki%20Pages/IAsyncResult.aspx and - http://www.bluebytesoftware.com/blog/2006/05/31/ImplementingAHighperfIAsyncResultLockfreeLazyAllocation.aspx for IAsyncResult details - - - - The underlying task for the async operation. - - - - - The callback provided by the user. - - - - - The state for the callback. - - - - - Indicates whether a task is completed. - - - - - Indicates whether task completed synchronously. - - - - - The event for blocking on this task's completion. - - - - - Initializes a new instance of the TaskAsyncResult class. - - The task to be executed. - The callback method to be used on completion. - The state for the callback. - - - - Provides a convenient function for waiting for completion and getting the result. - - The result of the operation. - - - - We implement the dispose only to allow the explicit closing of the event. - - - - - Releases unmanaged and - optionally - managed resources. - - Set to true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Provides the lazy initialization of the WaitHandle (based on Joe Duffy's blog). - - The WaitHandle to use for waiting on completion. - - - - Called on completion of the async operation to notify the user - (Based on Joe Duffy's lockless design). - - - - - Gets A user-defined object that contains information about the asynchronous operation. - - - - - Gets a System.Threading.WaitHandle that is used to wait for an asynchronous operation to complete. - - - - - Gets a value indicating whether the asynchronous operation completed synchronously. - - - - - Gets a value indicating whether the asynchronous operation has completed. - - - - - Encapsulates methods for wrapping tasks in timeouts. - - - - - Gets a timeout wrapped task. - - The type of the result. - The timeout. - The original task. - A that has been wrapped with a timeout if specified. - - - - Creates a localized timeout exception object. - - The timeout. - A localized object. - - - - Gets a timeout task sequence. - - The type of the result. - The timeout. - The set result. - A that has been wrapped with a timeout if specified. - - - - A set of extension methods for a webrequest. - - - - - Gets an asynchronous response to a given Web request. - - The requested that is used for operation. - The service. - The timeout. - A task that yields the response. - - - - Gets an asynchronous response to a given Web request. - - The requested that is used for operation. - The service. - The timeout. - A task that yields the response. - - - - Gets an asynchronous response to a given Web request. - - The requested that is used for operation. - The service. - The timeout. - A task that yields the response. - - - - Gets an asynchronous request stream for a given Web request. - - The requested that is used for operation. - A task that yields a stream. - - - - Gets an asynchronous response to a given Web request. - - The requested that is used for operation. - The service. - A task that yields the response. - - - - Gets an asynchronous response to a given Web request. - - The requested that is used for operation. - The service. - A task that yields the response. - - - - Gets an asynchronous response to a given Web request. - - The requested that is used for operation. - The service. - A task that yields the response. - - - - Tracing helper class. - - - - - Internal format string for trace messages. - - - - - Internal flag for turning on tracing. - - - - - Writes the line. - - The format. - The arguments. - - - - Writes the line internal. - - The format. - The arguments. - - - - General purpose utility methods. - - - - - This is the limit where we allow for the error message returned by the server. - Messages longer than that will be truncated. - - - - - Processes the unexpected status code. - - The response. - - - - Translates the data service client exception. - - The exception. - The translated exception. - - - - Translates the web exception. - - The exception. - The translated exception. - - - - Gets the extended error details from response. - - The HTTP response stream. - Length of the content. - The extended error information. - - - - Gets the extended error from XML message. - - The XML error message. - The extended error information. - - - - Copies the stream to buffer. - - The source stream. - The buffer. - The bytes to read. - The number of bytes copied. - - - - Translates from HTTP status. - - The status code. - The status description. - The details. - The inner. - The translated exception. - - - - Extracts an MD5 value from either an v1 or v2 block id. - - The block id containing an MD5. - MD5 value, or null if invalid format. - - - - Generates an block id using the given MD5 hash value. The id must be Base64 compatible. - - The hash value to encode in the block id. - The sequence prefix value. - The block id. - - - - Checks that the given timeout in within allowed bounds. - - The timeout to check. - The timeout is not within allowed bounds. - - - - Translates the extended error. - - The details. - The status code. - The status description. - The inner exception. - The translated exception. - - - - Gets the error details from stream. - - The input stream. - The error details. - - - - Represents storage account credentials for accessing the Windows Azure storage services. - - - - - Initializes a new instance of the class, using the storage account name and - access key. - - The name of the storage account. - The account access key, as an array of bytes. - - - - Initializes a new instance of the class, using the storage account name and - access key. - - The name of the storage account. - The account access key, as a Base64-encoded string. - - - - Transforms a resource URI into a shared access signature URI, by appending a - shared access token. For objects of type , this operation - returns the resource URI that is passed to it.. - - The resource URI to be transformed. - The URI for a shared access signature, including the resource URI and the shared access token. - - - - Signs a request using the specified credentials under the Shared Key authentication scheme. - - The web request to be signed. - - - - Signs a request using the specified credentials under the Shared Key Lite authentication scheme. - - The web request to be signed. - - - - Encodes a Shared Key or Shared Key Lite signature string by using the HMAC-SHA256 algorithm over a UTF-8-encoded string-to-sign. - - A UTF-8-encoded string-to-sign. - An HMAC-encoded signature string. - - - - Gets the base64 encoded key. - - The base64 encoded key. - - - - Performs the computation of the signature based on the private key. - - The string that should be signed. - The signature for the string. - - - - Returns a that represents this instance. - - If set to true exports secrets. - - A that represents this instance. - - - - - Gets a object that references the storage account name and access key. - - An object containing a reference to the storage account name and access key. - - - - Gets the name of the storage account associated with the specified credentials. - - The name of the storage account. - - - - Gets a value indicating whether the method should be called - to transform a resource URI to a URI that includes a token for a shared access signature. - - False for objects of type . - - - - Gets a value indicating whether a request can be signed under the Shared Key authentication - scheme using the specified credentials. - - True for objects of type . - - - - Gets a value indicating whether a request can be signed under the Shared Key Lite authentication - scheme using the specified credentials. - - True for objects of type . - - - - Gets a value indicating whether the method will return a valid - HMAC-encoded signature string when called using the specified credentials. - - True for objects of type . - - - - Sets the account name that owns the key to use when signing requests. - - The name of the account that owns the key to use when signing requests. - - - - Class that represents credentials for anonymous access. Used by internal implementaion. - - - - - Stores the singleton instance of this class. - - - - - Prevents a default instance of the class from being created. - - - - - A potential transformation to the Uri for signing purposes. The transformation may append to the string. - - The resource Uri to be transformed. - The new resource Uri that includes any transformations required for signing. - Identity operation for anonymous access. - - - - An operation that may add any required authentication headers based for the credential type. (SharedKey algorithm). - - The request that needs to be signed. - No op for anonymous access. - - - - An operation that may add any required authentication headers based for the credential type. (SharedKeyLite algorithm used for LINQ for Tables). - - The request that needs to be signed. - No op for anonymous access. - - - - Performs the computation of the signature based on the private key. - - The string that should be signed. - The signature for the string. - Returns null representing no op. - - - - Performs the computation of the signature based on the private key. - - The string to be signed. - The signature for the string. - Need for D-SAS not public. - - - - Returns a that represents this instance. - - If set to true exports secrets. - - A that represents this instance. - - - - - Gets account name information if available. Else returns null. - - - - - Gets a value indicating whether the method must be called - before generating a signature string with the specified credentials. - - - Is true if needs transform Uri; otherwise, false. If false, - calling returns the original, unmodified Uri. - - - - - Gets a value indicating whether SignRequest will perform signing when using this credentials. - False means SignRequest will not do anything. - - - Is true if a request can be signed with these credentials; otherwise, false. - - - - - Returns whether SignRequestLite will perform signing when using this credentials. - False means SignRequestLite will not do anything. - - - - - Returns whether ComputeHMAC will return a valid HMAC when using this credentials. - False means ComputeHmac will return null. - - - Returns true if these credentials will yield a valid signature string; otherwise, false. - - - - - Represents storage credentials for delegated access to Blob service resources - via a shared access signature. - - - - - Stores the shared access signature token. - - - - - Stores the internal used to transform Uris. - - - - - Initializes a new instance of the class - with the specified shared access token. - - A string token representing a shared access signature. - - - - Transforms a resource URI into a shared access signature URI, by appending a - shared access token. - - The resource URI to be transformed. - The URI for a shared access signature, including the resource URI and the shared access token. - - - - Signs a request using the specified credentials under the Shared Key authentication scheme. - This is not a valid operation for objects of type . - - The web request to be signed. - - - - Signs a request using the specified credentials under the Shared Key Lite authentication scheme. - This is not a valid operation for objects of type . - - The web request object to be signed. - - - - Encodes a Shared Key or Shared Key Lite signature string by using the HMAC-SHA256 algorithm over a UTF-8-encoded string-to-sign. - This is not a valid operation for objects of type . - - A UTF-8-encoded string-to-sign. - Null for objects of type . - - - - Encodes the signature string by using the HMAC-SHA-512 algorithm over - the UTF-8-encoded string-to-sign. - - The UTF-8-encoded string-to-sign. - The HMAC-encoded signature string. - - - - Returns a that represents this instance. - - If set to true exports secrets. - - A that represents this instance. - - - - - Gets the name of the storage account associated with the specified credentials. - - The name of the account. - - - - Gets a value indicating whether the method should be called - to transform a resource URI to a URI that includes a token for a shared access signature. - - True for objects of type . - - - - Gets a value indicating whether a request can be signed under the Shared Key authentication - scheme using the specified credentials. - - False for objects of type . - - - - Gets a value indicating whether a request can be signed under the Shared Key Lite authentication - scheme using the specified credentials. - - False for objects of type . - - - - Gets a value indicating whether the method will return a valid - HMAC-encoded signature string when called using the specified credentials. - - False for objects of type . - - - - Gets the token. - - The token. - - - diff --git a/msvs/RedisWAInst/bin/RedisPkgBin/RedisServer.dll b/msvs/RedisWAInst/bin/RedisPkgBin/RedisServer.dll deleted file mode 100644 index c6413332cb0af1ccdfebf5a475657888a6e48ae3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6144 zcmeHLYiu0V6+W}OUOSs)V;ht3NWugssq^s0j!o*6LhN{*#NbEb-Pna%N@jPj*F$D! zws&TY4S^kWkehNT@=p_y=kw`lqyle&@{Y zdi?;@AC;)YUClS=bL(;;d%dkqUZ4DGAQ`ra0%+?VDxo6}43|^Ooy+ftgdLuDGV{n(4`mS@H@hwRv-5ch&Xj5u!08O0N$d zIa6!x4T|jAXlx{Eg(MzIZ%^TE;u*xlVB!@C`wdF^&u_Yf2XZb^8vK$tVL$9l-t`v? z>8);}NhSt~&T}AEm-9rMAUhAc?W=Vk#+yVf4f+=FryBTFpcVu0=_CL;>07nm;G~#n zHl=-?2Pb_S1i=&4j;EmvqW3AS91n)vS2~Y}eQm|lPzH&PH?TsQ99I@;#&Z?xTF2ShadJk}K+}kS*LX(Ic?1+0^!tN8?59~<9_n(M)2S6@|avjOeNY_Ew zpvv*g9mkF8tnnIH=uh>e`g;0$kAlIxI>0RA-1#8URlFC`vCd4OZMW#N#lQxl*YWN= zo1u?Po<_s^oRS|PMc{zrD!8v1YSd51KuduN#6v0K;(V& z1JJjM{7%6P{T7luy$!rT?*e@~Zlvgbx)b;iWsPY_VwY;G0TU<%dm1ycob3&)XD-N4 z_0moc2)$A^hWV?O&yIVAilc6)DOIrjjM58ArwWckGoHSn^pxkQMiq_QdF}b$T#%Zv z-GXdSuZK=w3tzIV^2!@|9aqniQ4% zyr&&IR~yijnsZb>usxTCd|#Dv&QjJ695oam|K%{Ox;U-;ytd11x>h;txpQ{0qOA{7 zm&%sAw6-2%Sg7QKwTfY{yrk{o{5qJMOw0g+9r~1H|oxLgy@`G=GYHMcmnYfr@Z6CH4UGhUcwZ*dH7*N?6FD-d(9V) z_ppW$oVf){7e-y|oOLy_{npil+f7tw{cwj@x30*B5t=|vcwv?i(TK}aIAvi~xkcIe z{@P@43O&NakyR+1TW3eJcx_4uGt+TZwB4}I6y`-{N@P-@E}Cgb1H+Ez*Qb*w-*XWp zUQ!NkfRLrM?U&h(ZmX+@~C= zN83gror6|W3Gx6|9wfA7Mr0SHR*~ph&P-uDe8#ZN98oVz*^`C#70tp+&8k}@wcey4 zU&LcNonh()1v|OJ3#Xr7r<()rF{_x-FC(p#L-bO9G zzaE(W$&ra$q9z%5A}!C}H#>cO{~M1qo6+_S$w)G8MvU$4o8^>>nTC;Mh%^D(Mwx7B zqKJ`9#t3AbqRHg;?M=;i!H(J$lpvef$8}t%-HtUI?HkZivelrCa^j3zIBPVnqy~2} zY0!rHNk(KEbYnd$n!kC(fWN z3;CYDBe{VimUUF&L&%`!UfhB4BRXl&4XKHdY&|C(tfs5m_?~P~HrY{E@gi}oCEks# zT*s_y%>EWbF0uHutDW~d`4X6oY@N|odBSr?7V}Du52O^F$uh?Jw=FK9m@A@-_?Eo5 zg=i|1&irM2_gAOe&x}0#{Lgnh{ny7*Tx0k%v-s$nE%{zqxmlH;pVfR;L$Kh_N)Ts; zMqNJ;E8#gkDLw1u?t$J>majs)P@XCma&Su>DaNp*m^Q1-s+ZYdM|5r&=eFaFTecgX ztV+qfge$$jhs?oMwLfA1eDC6*$hhGnEd&u(qKhGfknK9~Zq+#icjSUa=GXr+Zr_ne(`q1%- z#IbK_s6Q=IAMMCl1AQ+}fS&rp?X|+5qY`>>;mv92<#IcXXI=^?37>3)lZd}k$Iwnu zYVv5y7$--oNb@qLwK5amh~_%uH|a2X*9+uwO8Pcg^~KTWzSU-uxiFF+)yDye>1l~{ zfhve+&@jRej%B~Za%H{M5nUb60jV>D8R2ufgq7gPz2Kwj$$&r3V21x04&MH8?&K$Z I`(H)iKSGZP%m4rY diff --git a/msvs/RedisWAInst/bin/RedisPkgBin/startup.cmd b/msvs/RedisWAInst/bin/RedisPkgBin/startup.cmd deleted file mode 100644 index c2197ed5..00000000 --- a/msvs/RedisWAInst/bin/RedisPkgBin/startup.cmd +++ /dev/null @@ -1,2 +0,0 @@ -@echo off -netsh advfirewall firewall add rule name="redis" dir=in action=allow enable=yes program="release\\redis-server.exe" \ No newline at end of file diff --git a/msvs/RedisWAInst/src/RedisDeployCmdlets/AddRedisConfigOptions.cs b/msvs/RedisWAInst/src/RedisDeployCmdlets/AddRedisConfigOptions.cs deleted file mode 100644 index f81a69ae..00000000 --- a/msvs/RedisWAInst/src/RedisDeployCmdlets/AddRedisConfigOptions.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Diagnostics; -using System.IO; -using System.Management.Automation; -using System.Security.Permissions; - -namespace RedisDeployCmdlets -{ - [Cmdlet(VerbsCommon.Add, "RedisConfigOptions")] - public class AddRedisConfigOptions : PSCmdlet - { - [Parameter(Mandatory = true, HelpMessage = "Set the master port")] - public string ListenPort { get; set; } - - [Parameter(Mandatory = true, HelpMessage = "Path to the redis configure file")] - public string Path { get; set; } - - [Parameter(Mandatory = false, HelpMessage = "Set the master url")] - public string MasterUrl { get; set; } - - [Parameter(Mandatory = false, HelpMessage = "Set the master port")] - public string MasterPort { get; set; } - - [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] - protected override void ProcessRecord() - { - base.ProcessRecord(); - - try - { - string opt = String.Format("port {0}\n", ListenPort); - - if (!String.IsNullOrEmpty(MasterUrl) && !String.IsNullOrEmpty(MasterPort)) - { - if (MasterUrl.ToUpper() != "LOCALHOST") - { - MasterUrl += ".cloudapp.net"; - } - - opt += String.Format("slaveof {0} {1}\n", MasterUrl, MasterPort); - } - File.AppendAllText(Path, String.Concat(opt)); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, string.Empty, ErrorCategory.CloseError, null)); - throw; - } - - } - } -} diff --git a/msvs/RedisWAInst/src/RedisDeployCmdlets/Properties/AssemblyInfo.cs b/msvs/RedisWAInst/src/RedisDeployCmdlets/Properties/AssemblyInfo.cs deleted file mode 100644 index b737a2f0..00000000 --- a/msvs/RedisWAInst/src/RedisDeployCmdlets/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,58 +0,0 @@ -#region Copyright Notice -/* -Copyright © Microsoft Open Technologies, Inc. -All Rights Reserved -Apache 2.0 License - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. -*/ -#endregion - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("RedisDeployCmdlets")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("RedisDeployCmdlets")] -[assembly: AssemblyCopyright("Copyright © Microsoft Open Technologies, Inc.")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("ad1aed47-c88e-4fd0-affc-86621f4cbc23")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/msvs/RedisWAInst/src/RedisDeployCmdlets/RedisDeployCmdlets.csproj b/msvs/RedisWAInst/src/RedisDeployCmdlets/RedisDeployCmdlets.csproj deleted file mode 100644 index a156305d..00000000 --- a/msvs/RedisWAInst/src/RedisDeployCmdlets/RedisDeployCmdlets.csproj +++ /dev/null @@ -1,83 +0,0 @@ - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {2F9BEF35-EB38-41C1-9A2E-136702720EE9} - Library - Properties - RedisDeployCmdlets - RedisDeployCmdlets - v4.0 - 512 - Client - - - - - - - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - False - ..\..\..\..\Windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll - - - - - - - - - - - - - Always - - - - - XCOPY /Y/I/Q "$(ProjectDir)$(OutDir)*.dll" "$(SolutionDir)RedisInstBin" -XCOPY /Y/I/Q "$(ProjectDir)$(OutDir)*.pdb" "$(SolutionDir)RedisInstBin" -XCOPY /Y/I/Q "$(ProjectDir)$(OutDir)*.xml" "$(SolutionDir)RedisInstBin" -XCOPY /Y/I/Q "$(ProjectDir)$(OutDir)*.psd1" "$(SolutionDir)RedisInstBin" - - - - - - - - - \ No newline at end of file diff --git a/msvs/RedisWAInst/src/RedisDeployCmdlets/RedisDeployCmdlets.psd1 b/msvs/RedisWAInst/src/RedisDeployCmdlets/RedisDeployCmdlets.psd1 deleted file mode 100644 index 34dd8769a3cc4eade56baa9c4a823f30dbb08ab2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4974 zcmchbU2hvj6o$`jkoXTP^&%+((}eI*q)N4#rc^3b)rP_aHyg(`7Pi+oZqtJJ>%jBQ z$z*oC8)G|ZWvx9sALqR1`;7nn=Z<}9pV%EM>_@BY%--18`n*l7w5g43z}vYkm>IA> z4=eS3yPO+YkClpj6}uMJv7ecnLank3X1n$$bmvg&uv>IX8}c^cnX-TP5<^7tB+U0Y zQL@^HPGP6^-oEEIr(D!%7xp6X)45mn8|TJ+3Oiv`!po_z;!%M{JifLs?ZCbY-}h{v zaXPEfL;EYtL|U(c{3DwMJxxH7^yoS}4f-fS_8$8Ajsa_~^AcT2hdpMJ_S)6D57k z{yD27PE4UU#jX=yZrMH z=4EN=bp&SjDEX~s+ObHQC-##$UFSRC>^`UNWBo%$Utoa)#sfx&P`!^PHFpTQgD_XJ zrnm3#l!1NAbIRks9QD-&oiMl;tkRE8tPatNvWjwx`+CdgrXQ4!gT}mGVbIt0+-nk8S#irM{+rjGLCm*h3%m+Nzk{?!SxGu?3*y^g8Gc{VR(B=9@Ka{>`g@7 zYw@(lN$Mb!eN_=uEz|+2AJ9nMhiboSo@ADs$~ww(-YMvm_6*6g75kNK3udMv%PQMW zgQc|J^RKeD>ZG5q(-zfXSZV8WR6Acnxt{;(Jx}bz9-{rbSr6Go8r2nbQ>q23BCF(; zBqegXtg0EeiMbt(EYw7vcfYZl75Y80^$a=ogZCuc$tP2sxTRcH&Gv$Q)Dh3At)lax zELBH-PCjbynVS-yP^V`>f_7=&Va4&K%<5F#LvxE=1fNt7y_t7K-kab(4&JOAo&5Xb zW3Kbx1ov{}G^4RVCV7amn6iOKgEDixfoV1G3+k)tKV?bXxTKeqIr95((>E09syLDB zGS&ySgZJL-wsjopNa_+Li|e3o@2;|)EUFx)ZtnVyxk*bhJR6%ag2=0`H6!^koTE8MAJ@IFV$I$sNa5f mEQoiFN@QN(*RBiy-^1Ty4^Y?H&7wa?aCF6gxsUn#3ip4bKRRFl diff --git a/msvs/RedisWAInst/src/RedisInstWA/DownloadHelper.cs b/msvs/RedisWAInst/src/RedisInstWA/DownloadHelper.cs deleted file mode 100644 index f027317d..00000000 --- a/msvs/RedisWAInst/src/RedisInstWA/DownloadHelper.cs +++ /dev/null @@ -1,120 +0,0 @@ -#region Copyright Notice -/* -Copyright © Microsoft Open Technologies, Inc. -All Rights Reserved -Apache 2.0 License - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. -*/ -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.IO; -using System.Net; -using System.Threading; - -namespace RedisInstWA -{ - public delegate void Print(String message); - - /// - /// Code to download file copied from Inst4WA - /// - public class DownloadHelper : IDisposable - { - private AutoResetEvent threadBlocker; - private int downloadProgress; - - private bool isSuccessful; - private Exception error; - - public void Download(Uri url, string saveLoc) - { - try - { - using (WebClient setupDownloader = new WebClient()) - { - setupDownloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(setupDownloader_DownloadProgressChanged); - setupDownloader.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(setupDownloader_DownloadFileCompleted); - setupDownloader.DownloadFileAsync(url, saveLoc); - - Console.WriteLine("Downloading - "); - threadBlocker = new AutoResetEvent(false); - threadBlocker.WaitOne(); - } - - if (isSuccessful == false) - { - throw error; - } - } - finally - { - if (threadBlocker != null) - { - threadBlocker.Close(); - threadBlocker = null; - } - } - } - - private void setupDownloader_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) - { - if ((e.ProgressPercentage % 10 == 0) && (e.ProgressPercentage > downloadProgress)) - { - downloadProgress = e.ProgressPercentage; - Console.Write(String.Concat(" ", e.ProgressPercentage, "%")); - } - } - - private void setupDownloader_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) - { - if (e.Error == null) - { - isSuccessful = true; - } - else - { - isSuccessful = false; - error = e.Error; - } - - Console.WriteLine(); - threadBlocker.Set(); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - // free managed resources - if (threadBlocker != null) - { - threadBlocker.Close(); - threadBlocker = null; - } - } - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - } -} diff --git a/msvs/RedisWAInst/src/RedisInstWA/ExtractZip.cs b/msvs/RedisWAInst/src/RedisInstWA/ExtractZip.cs deleted file mode 100644 index ff60d36b..00000000 --- a/msvs/RedisWAInst/src/RedisInstWA/ExtractZip.cs +++ /dev/null @@ -1,133 +0,0 @@ -#region Copyright Notice -/* -Copyright © Microsoft Open Technologies, Inc. -All Rights Reserved -Apache 2.0 License - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. -*/ -#endregion - - -namespace RedisInstWA -{ - using Shell32; - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Text; - - /// - /// Download zip from URL and extract files - /// - public class ExtractZip - { - public void Download(string url, string path) - { - DownloadHelper down = new DownloadHelper(); - Uri uri = new Uri(url); - down.Download(uri, path); - } - - public string FindBinZip(string path, string binzip) - { - IEnumerable subdirs = Directory.EnumerateDirectories(path); - if (subdirs != null && subdirs.Count() > 0) - { - string subpath = Path.Combine(path, subdirs.First()); - string binpath = Path.Combine(subpath, @"msvs\bin\release\", binzip); - if (File.Exists(binpath)) - { - return binpath; - } - else - { - // bin folder moved in later versions. - binpath = Path.Combine(subpath, @"bin\release\", binzip); - if (File.Exists(binpath)) - { - return binpath; - } - } - } - - return null; - } - - public void ExtractFilesFromZip(string src, string dest) - { - Shell sh = new Shell(); - Folder inzip = sh.NameSpace(src); - Folder outdir = sh.NameSpace(dest); - outdir.CopyHere(inzip.Items(), 0); // 4 for no progress dialog, 16 for Yes to all - } - - public int DownloadAndExtract(string zipurl, string workPath, string binfolder, bool isX64) - { - string zippath = Path.Combine(workPath, "zipfile"); - if (!FolderHelper.MakeFolderReset(zippath)) - return 5; - - try - { - string zipfile = Path.Combine(zippath, "redis.zip"); - Download(zipurl, zipfile); - IEnumerable subfiles = Directory.EnumerateFiles(zippath); - if (!File.Exists(zipfile)) - { - // download did nothing - Console.WriteLine("Downloading zip file failed"); - return 1; - } - - // unzip the downloaded file - ExtractFilesFromZip(zipfile, zippath); - - string binzip = isX64 ? "redisbin64.zip" : "redisbin.zip"; - string embeddedzip = FindBinZip(zippath, binzip); - if (embeddedzip == null) - { - // binaries zip not found - Console.WriteLine("Did not find {0} in downloaded zip file", binzip); - return 2; - } - string binpath = Path.Combine(workPath, binfolder); - if (!FolderHelper.MakeFolderReset(binpath)) - return 5; - - ExtractFilesFromZip(embeddedzip, binpath); - - IEnumerable exefiles = Directory.EnumerateFiles(binpath, "redis-server.exe", SearchOption.AllDirectories); - if (exefiles == null || exefiles.Count() == 0) - { - // executable not found - Console.WriteLine("Extracting redis-server from zip failed"); - return 3; - } - } - catch (Exception ex) - { - if (ex.InnerException != null) - Console.WriteLine(ex.InnerException.Message); - else - Console.WriteLine(ex.Message); - return 4; - } - - return 0; - } - } -} diff --git a/msvs/RedisWAInst/src/RedisInstWA/FolderHelper.cs b/msvs/RedisWAInst/src/RedisInstWA/FolderHelper.cs deleted file mode 100644 index 801f2bbc..00000000 --- a/msvs/RedisWAInst/src/RedisInstWA/FolderHelper.cs +++ /dev/null @@ -1,96 +0,0 @@ -#region Copyright Notice -/* -Copyright © Microsoft Open Technologies, Inc. -All Rights Reserved -Apache 2.0 License - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. -*/ -#endregion - - -namespace RedisInstWA -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Security.AccessControl; - using System.Text; - - /// - /// Utility methods for directories and files - /// - public static class FolderHelper - { - /// - /// Make a folder if doesn't exist - /// - /// - /// - public static bool MakeFolder(string folderPath) - { - if (!Directory.Exists(folderPath)) - { - try - { - DirectorySecurity securityRules = new DirectorySecurity(); - securityRules.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, - InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, - PropagationFlags.NoPropagateInherit, - AccessControlType.Allow)); - - Directory.CreateDirectory(folderPath, securityRules); - File.SetAttributes(folderPath, FileAttributes.Normal); - } - catch (Exception ex) - { - Console.WriteLine("Exception trying to create folder: " + folderPath); - if (ex.InnerException != null) - Console.WriteLine(ex.InnerException.Message); - else - Console.WriteLine(ex.Message); - return false; - } - } - return true; - } - - public static bool MakeFolderReset(string folderPath) - { - if (Directory.Exists(folderPath)) - { - try - { - // make sure it is empty to start - Directory.Delete(folderPath, true); - } - catch (Exception ex) - { - Console.WriteLine("Exception trying to delete folder: " + folderPath); - if (ex.InnerException != null) - Console.WriteLine(ex.InnerException.Message); - else - Console.WriteLine(ex.Message); - return false; - } - } - - MakeFolder(folderPath); - - return true; - } - } -} diff --git a/msvs/RedisWAInst/src/RedisInstWA/InstWaXml.cs b/msvs/RedisWAInst/src/RedisInstWA/InstWaXml.cs deleted file mode 100644 index cfee99b2..00000000 --- a/msvs/RedisWAInst/src/RedisInstWA/InstWaXml.cs +++ /dev/null @@ -1,342 +0,0 @@ -#region Copyright Notice -/* -Copyright © Microsoft Open Technologies, Inc. -All Rights Reserved -Apache 2.0 License - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. -*/ -#endregion - - -namespace RedisInstWA -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Text; - - /// - /// Create XML file to control Inst4WA utility - /// - public class InstWaXml - { - //Fragments of the XML file to control Inst4WA are defined here - // The parameters are used to customize the XML file - - private const string instXmlSkeleton = -@" - -{0} - - -{1} - - -"; - - // emul value is true or false - private const string instXmlEmul = -@" - -"; - - // Set up folder path variables - // {0} is work folder path - // {1} is Redis Azure installer binaries folder path - // {2} is subfolder for redis exe files (binaries) - // {3} is path to csdef and cscfg files - // {4} is path to redis.conf input file - private const string instXmlRoot = -@" - - - - - - - - -"; - - // Set up publish setting file path - // {0} is file path path - private const string instXmlPubSettingsFile = -@" - -"; - - // paths for SDK components - private const string instXmlSDK = -@" - - - - -"; - - // Azure settings - // {0} is Domain - // {1} is subscription - private const string instXmlAzure = -@" - - - - - -"; - - // Config files - // {0} is local or cloud - private const string instXmlAzureCfg = -@" - -"; - - // Roles - // {0} is role index - // {1} is role name - // {2} is role internal listening port - private const string instXmlRole = -@" - - - -"; - - // Master role - // {0} is master port (external) - // {1} is master host name or IP - private const string instXmlMasterRole = -@" - -"; - - // common steps to add assemblies and create folder - private const string instXmlStepPrep = -@" - - - - - - - - - - - - - - - - - - - - - - -"; - - // steps to publish settings if not emul - private const string instXmlStepPrepProd = -@" - - -"; - - // Master role install - // {0} is index for role - should be 0 - private const string instXmlMasterRoleStep = -@" - - - - - - - - - - - - - - - - - - -"; - - // Slave role install - // {0} is index for role - private const string instXmlSlaveRoleStep = -@" - - - - - - - - - - - - - - - - - - - - -"; - - // Launch for emul - private const string instXmlLaunchEmul = -@" - -"; - - // Launch for Azure - private const string instXmlDeployAzure = -@" - - - - - - - - - - - - - - - - - -"; - - /// - /// Create the XmlConfig.xml file - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - public static bool CreateInstXml(bool isEmul, - string configPath, - string redisConfPath, - string workPath, - string redisInstBinPath, - string redisBinSubFolder, - string domain, - string subscription, - string pubSettingsFilePath, - List instances) - { - RedisInstance masterInst = instances[0]; - int masterIndex = 0; - - StringBuilder sbParams = new StringBuilder(); - sbParams.AppendFormat(instXmlEmul, isEmul ? "true" : "false"); - sbParams.AppendFormat(instXmlRoot, workPath, redisInstBinPath, redisBinSubFolder, configPath, redisConfPath); - sbParams.AppendFormat(instXmlPubSettingsFile, pubSettingsFilePath == null ? "" : pubSettingsFilePath); - sbParams.Append(instXmlSDK); - if (!isEmul) - { - sbParams.AppendFormat(instXmlAzure, domain, subscription); - } - sbParams.AppendFormat(instXmlAzureCfg, isEmul ? "local" : "cloud"); - - int roleIndex = 0; - foreach (RedisInstance inst in instances) - { - if (inst.IsMaster) - { - masterInst = inst; - masterIndex = roleIndex; - } - sbParams.AppendFormat(instXmlRole, roleIndex, inst.RoleName, inst.LocalPort); - roleIndex++; - } - sbParams.AppendFormat(instXmlMasterRole, masterInst.MasterPort, isEmul ? "localhost" : domain); - - StringBuilder sbSteps = new StringBuilder(); - sbSteps.Append(instXmlStepPrep); - if (!isEmul) - { - sbSteps.Append(instXmlStepPrepProd); - } - - sbSteps.AppendFormat(instXmlMasterRoleStep, masterIndex); - roleIndex = 0; - foreach (RedisInstance inst in instances) - { - if (!inst.IsMaster) - { - sbSteps.AppendFormat(instXmlSlaveRoleStep, roleIndex); - } - roleIndex++; - } - - if (isEmul) - { - sbSteps.Append(instXmlLaunchEmul); - } - else - { - sbSteps.Append(instXmlDeployAzure); - } - - string xmlconfig = String.Format(instXmlSkeleton, sbParams.ToString(), sbSteps.ToString()); - - try - { - File.WriteAllText(Path.Combine(workPath, "XmlConfig.xml"), xmlconfig, Encoding.UTF8); - } - catch (Exception ex) - { - if (ex.InnerException != null) - Console.WriteLine(ex.InnerException.Message); - else - Console.WriteLine(ex.Message); - return false; - } - - Console.WriteLine("XmlConfig file for Inst4WA written as"); - Console.WriteLine(Path.Combine(workPath, "XmlConfig.xml")); - return true; - } - } -} diff --git a/msvs/RedisWAInst/src/RedisInstWA/ParseConfig.cs b/msvs/RedisWAInst/src/RedisInstWA/ParseConfig.cs deleted file mode 100644 index 8eec9a05..00000000 --- a/msvs/RedisWAInst/src/RedisInstWA/ParseConfig.cs +++ /dev/null @@ -1,99 +0,0 @@ -#region Copyright Notice -/* -Copyright © Microsoft Open Technologies, Inc. -All Rights Reserved -Apache 2.0 License - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. -*/ -#endregion - - -namespace RedisInstWA -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Text; - using System.Xml.XPath; - using System.Xml; - - /// - /// Parse the csdef file to find roles to be installed and ports - /// - public class ParseConfig - { - public static List Parse(string filePath) - { - List instances = new List(); - - try - { - XPathDocument csdef = new XPathDocument(filePath); - XPathNavigator csdefNav = csdef.CreateNavigator(); - XmlNamespaceManager nsm = new XmlNamespaceManager(csdefNav.NameTable); - - nsm.AddNamespace("ns", "http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"); - - XPathNodeIterator roles = csdefNav.Select("/ns:ServiceDefinition/ns:WorkerRole", nsm); - - // first node must be master - bool isMaster = true; - int masterPort = 0; - while (roles.MoveNext()) - { - int port = 0; - string localPort = string.Empty; - string extPort = string.Empty; - string roleName = roles.Current.GetAttribute("name", string.Empty); - XPathNodeIterator endpoint = roles.Current.Select("./ns:Endpoints/ns:InputEndpoint", nsm); - if (endpoint.MoveNext()) - { - localPort = endpoint.Current.GetAttribute("localPort", string.Empty); - extPort = endpoint.Current.GetAttribute("port", string.Empty); - } - - if (roleName != string.Empty && localPort != string.Empty) - { - int.TryParse(localPort, out port); - RedisInstance instance = new RedisInstance(); - instance.IsMaster = isMaster; - instance.LocalPort = port; - instance.RoleName = roleName; - if (isMaster) - { - if (int.TryParse(extPort, out port)) - masterPort = port; - } - instance.MasterPort = masterPort; - instances.Add(instance); - isMaster = false; - } - } - } - catch (Exception ex) - { - Console.WriteLine("Parsing ServiceDefinition file failed: " + filePath); - if (ex.InnerException != null) - Console.WriteLine(ex.InnerException.Message); - else - Console.WriteLine(ex.Message); - } - - return instances; - } - - } -} diff --git a/msvs/RedisWAInst/src/RedisInstWA/Program.cs b/msvs/RedisWAInst/src/RedisInstWA/Program.cs deleted file mode 100644 index 6bc5be5c..00000000 --- a/msvs/RedisWAInst/src/RedisInstWA/Program.cs +++ /dev/null @@ -1,514 +0,0 @@ -#region Copyright Notice -/* -Copyright © Microsoft Open Technologies, Inc. -All Rights Reserved -Apache 2.0 License - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. -*/ -#endregion - -using Shell32; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Security.Principal; -using System.Text; - -namespace RedisInstWA -{ - class Program - { - // values from input args - static string GitUrl; - static string LocalExePath; - static bool IsLocal; - static string ConfigFolderPath; - static string RedisConfPath; - static bool IsEmul; - static string Domain; - static string Subscription; - static string passThough; - static bool IsX64; - - // Values from environment or configuration - static string WorkPath; - static string RedisInstExePath; - static string PubSettingFilePath; - static List Instances; - - const string WorkDir = "RedisInstWork"; - const string BinariesSubDir = "release"; - - /// - /// Prepare and initiate install of Redis to Azure - /// - /// - static void Main(string[] args) - { - - if (!IsElevated) - { - Console.WriteLine("RedisInstWA must be run as an Administrator"); - Environment.Exit(1); - } - if (args == null || args.Count() == 0) - { - Console.WriteLine("No parameters were provided\r\n"); - Usage(); - Environment.Exit(1); - } - else - { - if (!ValidateArgs(args)) - { - Console.WriteLine("Usage:"); - Usage(); - Environment.Exit(1); - } - // create work directory for copying files - string curpath = Directory.GetCurrentDirectory(); - WorkPath = Path.Combine(curpath, WorkDir); - if (!FolderHelper.MakeFolder(WorkPath)) - { - Console.WriteLine("Failed to make folder for staging the installation"); - Environment.Exit(2); - } - - - - RedisInstExePath = Assembly.GetExecutingAssembly().Location; - RedisInstExePath = Path.GetDirectoryName(RedisInstExePath); - // Download and extract exe from zip file or copy local exe - if (!PrepareBinaries(WorkPath)) - { - Console.WriteLine("Failed to copy redis executable files to staging directory"); - Environment.Exit(2); - } - - // Parse the ServiceDefinition to extract roles and ports - if (!ParseConfiguration()) - { - Console.WriteLine("Failed to parse the ServiceDefinition file"); - Environment.Exit(3); - } - - // Prepare instances and xml file for Inst4WA - if (!PrepareInstaller()) - { - Console.WriteLine("Failed to create the XML Configuration file for the installer"); - Environment.Exit(4); - } - - // run Inst4WA to do install - if (!RunInstaller()) - { - Console.WriteLine("Failed to execute Inst4WA process to install Redis"); - Environment.Exit(5); - } - } - Environment.Exit(0); - } - - /// - /// Validate input parameters - /// - /// - /// - private static bool ValidateArgs(string[] args) - { - bool isSource = false; - bool isConfig = false; - bool isRedisConf = false; - bool isEmuOrAzure = false; - passThough = ""; - IsX64 = false; - - for (int i = 0; i < args.Length; i++) - { - if (args[i].StartsWith("-So", StringComparison.InvariantCultureIgnoreCase)) - { - if (i == args.Length - 1) - { - Console.WriteLine("Missing argument after: " + args[i]); - return false; - } - i++; - if (args[i].StartsWith("http", StringComparison.InvariantCultureIgnoreCase)) - { - if (Uri.IsWellFormedUriString(args[i], UriKind.Absolute) == false) - { - Console.WriteLine("Source URL format is invalid: " + args[i]); - return false; - } - GitUrl = args[i]; - IsLocal = false; - } - else if (!Directory.Exists(args[i])) - { - Console.WriteLine("Source path does not exist: " + args[i]); - return false; - } - else - { - string sourcePath = Path.GetFullPath(args[i]); - string[] files = Directory.GetFiles(sourcePath, "redis-server.exe"); - if (files == null || files.Length == 0) - { - Console.WriteLine("Source path does not contain redis-server.exe: " + args[i]); - return false; - } - IsLocal = true; - LocalExePath = sourcePath; - } - isSource = true; - } - else if (args[i].StartsWith("-Co", StringComparison.InvariantCultureIgnoreCase)) - { - if (i == args.Length - 1) - { - Console.WriteLine("Missing argument after: " + args[i]); - return false; - } - i++; - if (!Directory.Exists(args[i])) - { - Console.WriteLine("Configuration path does not exist: " + args[i]); - return false; - } - else - { - string configPath = Path.GetFullPath(args[i]); - string[] files = Directory.GetFiles(configPath, "ServiceDefinition.csdef"); - if (files == null || files.Length == 0) - { - Console.WriteLine("Configuration path does not contain ServiceDefinition.csdef: " + args[i]); - return false; - } - files = Directory.GetFiles(configPath, "ServiceConfiguration.Local.cscfg"); - if (files == null || files.Length == 0) - { - Console.WriteLine("Configuration path does not contain ServiceConfiguration.Local.cscfg: " + args[i]); - return false; - } - files = Directory.GetFiles(configPath, "ServiceConfiguration.Cloud.cscfg"); - if (files == null || files.Length == 0) - { - Console.WriteLine("Configuration path does not contain ServiceConfiguration.Cloud.cscfg: " + args[i]); - return false; - } - files = Directory.GetFiles(configPath, "*.publishsettings"); - if (files != null && files.Length > 0) - { - // found at least one publishsettings file. Choose first one. - PubSettingFilePath = files[0]; - } - else - { - PubSettingFilePath = null; - } - ConfigFolderPath = configPath; - isConfig = true; - } - } - else if (args[i].StartsWith("-Re", StringComparison.InvariantCultureIgnoreCase)) - { - if (i == args.Length - 1) - { - Console.WriteLine("Missing argument after: " + args[i]); - return false; - } - i++; - if (!Directory.Exists(args[i])) - { - Console.WriteLine("RedisConf path does not exist: " + args[i]); - return false; - } - else - { - string redisconfPath = Path.GetFullPath(args[i]); - string[] files = Directory.GetFiles(redisconfPath, "redis.conf"); - if (files == null || files.Length == 0) - { - Console.WriteLine("RedisConf path does not contain redis.conf: " + args[i]); - return false; - } - RedisConfPath = redisconfPath; - isRedisConf = true; - } - } - else if (args[i].StartsWith("-Em", StringComparison.InvariantCultureIgnoreCase)) - { - if (isEmuOrAzure && !IsEmul) - { - Console.WriteLine("Both -Emul and -Domain or -Subscription may not be specified "); - return false; - } - IsEmul = true; - isEmuOrAzure = true; - } - else if (args[i].StartsWith("-Do", StringComparison.InvariantCultureIgnoreCase)) - { - if (i == args.Length - 1) - { - Console.WriteLine("Missing argument after: " + args[i]); - return false; - } - i++; - if (isEmuOrAzure && IsEmul) - { - Console.WriteLine("Both -Emul and -Domain may not be specified "); - return false; - } - isEmuOrAzure = true; - IsEmul = false; - Domain = args[i]; - } - else if (args[i].StartsWith("-Su", StringComparison.InvariantCultureIgnoreCase)) - { - if (i == args.Length - 1) - { - Console.WriteLine("Missing argument after: " + args[i]); - return false; - } - i++; - if (isEmuOrAzure && IsEmul) - { - Console.WriteLine("Both -Emul and -Subscription may not be specified "); - return false; - } - isEmuOrAzure = true; - IsEmul = false; - Subscription = args[i]; - } - else if (args[i].StartsWith("--Pa", StringComparison.InvariantCultureIgnoreCase)) - { - // Following parameters are passed on to Inst4WA - passThough = " "; - i++; - while (i < args.Length) - { - // put remaining args into a string with space spearator - // If arg doesn't start with -, enclose with quotes - if (args[i].StartsWith("-")) - passThough += args[i] + " "; - else - passThough += @"""" + args[i] + @""" "; - i++; - } - break; - } - else if (args[i].StartsWith("-X64", StringComparison.InvariantCultureIgnoreCase)) - { - IsX64 = true; - } - else - { - Console.WriteLine("Unknown option specified " + args[i]); - return false; - } - } - if (!isSource) - { - Console.WriteLine("Missing -Source argument"); - return false; - } - if (!isConfig) - { - Console.WriteLine("Missing -Configuration argument"); - return false; - } - if (!isRedisConf) - { - Console.WriteLine("Missing -RedisConf argument"); - return false; - } - if (!isEmuOrAzure) - { - Console.WriteLine("Missing -Emul or -Domain and -Subscription argument"); - return false; - } - if (!IsEmul && String.IsNullOrWhiteSpace(Domain)) - { - Console.WriteLine("Missing -Domain argument"); - return false; - } - if (!IsEmul && String.IsNullOrWhiteSpace(Subscription)) - { - Console.WriteLine("Missing -Subscription argument"); - return false; - } - - return true; - } - - /// - /// Place installable files in folders - /// - /// - /// - private static bool PrepareBinaries(string workPath) - { - string WorkBinariesPath = Path.Combine(workPath, BinariesSubDir); - bool isCopied = false; - - if (!IsLocal) - { - ExtractZip exz = new ExtractZip(); - int rc = exz.DownloadAndExtract(GitUrl, workPath, BinariesSubDir, IsX64); - isCopied = rc == 0; - } - else - { - if (!FolderHelper.MakeFolder(workPath)) - return false; - - if (LocalExePath != WorkBinariesPath) - { - if (!FolderHelper.MakeFolderReset(WorkBinariesPath)) - return false; - - Shell sh = new Shell(); - Folder outdir = sh.NameSpace(WorkBinariesPath); - IEnumerable subfiles = Directory.EnumerateFiles(LocalExePath, "*.exe"); - foreach (string file in subfiles) - { - string filepath = Path.Combine(LocalExePath, file); - outdir.CopyHere(filepath, 0); // 4 for no progress dialog, 16 for Yes to all - } - subfiles = Directory.EnumerateFiles(LocalExePath, "*.pdb"); - foreach (string file in subfiles) - { - string filepath = Path.Combine(LocalExePath, file); - outdir.CopyHere(filepath, 0); // 4 for no progress dialog, 16 for Yes to all - } - } - - // return true if redis-server exists - isCopied = File.Exists(Path.Combine(WorkBinariesPath, @"redis-server.exe")); - } - - if (isCopied) - { - // copy redis.conf file to workPath - string redisconf = File.ReadAllText(Path.Combine(RedisConfPath, @"redis.conf")); - File.WriteAllText(Path.Combine(workPath, @"redis.conf"), redisconf); - } - return isCopied; - } - - /// - /// Parse csdef file to extract installation properties - /// - /// - private static bool ParseConfiguration() - { - string pathCsdef = Path.Combine(ConfigFolderPath, "ServiceDefinition.csdef"); - - Instances = ParseConfig.Parse(pathCsdef); - return Instances.Count > 0; - } - - /// - /// Prepare XML file used as input to Inst4WA - /// - /// - private static bool PrepareInstaller() - { - return InstWaXml.CreateInstXml(IsEmul, - ConfigFolderPath, - WorkPath, - WorkPath, - RedisInstExePath, - BinariesSubDir, - Domain, - Subscription, - PubSettingFilePath, - Instances); - } - - private static bool RunInstaller() - { - string args = "-XmlConfigPath " + @"""" + Path.Combine(WorkPath, "XmlConfig.xml") + @""""; - if (!IsEmul) - { - // append DomainName and Subscription, enclosing values in quotes - args = args + " -DomainName " + @"""" + Domain + @"""" + " -Subscription " + @"""" + Subscription + @""""; - } - // append passthrough args - args = args + passThough; - - // create process info to run inst4wa - Process p = new Process(); - - p.StartInfo.FileName = Path.Combine(RedisInstExePath, @"Inst4WA\Inst4WA.exe"); - p.StartInfo.Arguments = args; - p.StartInfo.UseShellExecute = false; - p.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory(); - - Console.WriteLine("Launching " + p.StartInfo.FileName + " " + p.StartInfo.Arguments); - p.Start(); - - p.WaitForExit(); - p.Close(); - - return true; - } - - private static bool IsElevated - { - get - { - return new WindowsPrincipal - (WindowsIdentity.GetCurrent()).IsInRole - (WindowsBuiltInRole.Administrator); - } - } - - private static void Usage() - { - string msg = "RedisInstWA installs Redis to Windows Azure.\r\n" + - "RedisInstWA -Source | \r\n" + - " -Config \r\n" + - " -RedisConf \r\n" + - " -Emu | -Domain -Subscription \r\n" + - " [--Pass ]\r\n" + - "Where:\r\n" + - "-Source : URL to download redis. For example:\r\n" + - " 'https://github.com/MSOpenTech/redis/archive/2.4.zip'\r\n" + - "-Source : local path to folder with redis exe files\r\n" + - "-X64: Use this to deploy 64bit binaries. If omitted then 32bit binaries are used\r\n" + - "-Config : local path to folder with .csdef file\r\n" + - "-RedisConf : local path to folder with redis.conf file\r\n" + - "-Emu: Use this if deploying to emulator\r\n" + - "-Domain : Name to be used to create the hosted service in Azure\r\n" + - "-Subscription : Windows Azure subscription name (not ID)\r\n" + - "--Pass : Optional. Parameters after --Pass are for Inst4WA\r\n" + - " This can be used to override settings such as Region\r\n" + - "\r\n" + - "Notes:\r\n" + - "Only the first 2 characters of each option are needed (-So is same as -Source)\r\n\r\n" + - "The installer must be run with elevated Administrator privileges\r\n\r\n" + - "Specify one redis.conf for all instances.\r\n" + - " For each instance the port number is appended.\r\n" + - " For each slave, the master endpoint is appended\r\n" + - "\r\n"; - Console.WriteLine(msg); - } - } -} diff --git a/msvs/RedisWAInst/src/RedisInstWA/Properties/AssemblyInfo.cs b/msvs/RedisWAInst/src/RedisInstWA/Properties/AssemblyInfo.cs deleted file mode 100644 index 5487a515..00000000 --- a/msvs/RedisWAInst/src/RedisInstWA/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("RedisInstWA")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("RedisInstWA")] -[assembly: AssemblyCopyright("Copyright © 2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("8439504d-6a7f-4c0d-9cfa-52cd74f52da5")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/msvs/RedisWAInst/src/RedisInstWA/RedisInstWA.csproj b/msvs/RedisWAInst/src/RedisInstWA/RedisInstWA.csproj deleted file mode 100644 index 6cf197f0..00000000 --- a/msvs/RedisWAInst/src/RedisInstWA/RedisInstWA.csproj +++ /dev/null @@ -1,87 +0,0 @@ - - - - Debug - x86 - 8.0.30703 - 2.0 - {C8A325BB-0BF9-4A53-941E-3A84C2B27124} - Exe - Properties - RedisInstWA - RedisInstWA - v4.0 - Client - 512 - - - - - - - - - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - x86 - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - {50A7E9B0-70EF-11D1-B75A-00A0C90564FE} - 1 - 0 - 0 - tlbimp - False - True - - - - - XCOPY /Y/I/Q "$(ProjectDir)$(OutDir)*.exe" "$(SolutionDir)RedisInstBin" -XCOPY /Y/I/Q "$(ProjectDir)$(OutDir)*.pdb" "$(SolutionDir)RedisInstBin" - - - - \ No newline at end of file diff --git a/msvs/RedisWAInst/src/RedisInstWA/RedisInstance.cs b/msvs/RedisWAInst/src/RedisInstWA/RedisInstance.cs deleted file mode 100644 index 710a8957..00000000 --- a/msvs/RedisWAInst/src/RedisInstWA/RedisInstance.cs +++ /dev/null @@ -1,41 +0,0 @@ -#region Copyright Notice -/* -Copyright © Microsoft Open Technologies, Inc. -All Rights Reserved -Apache 2.0 License - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. -*/ -#endregion - - -namespace RedisInstWA -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Text; - - /// - /// Data representing a single Redis instance - /// - public class RedisInstance - { - public int LocalPort { get; set; } - public bool IsMaster { get; set; } - public int MasterPort { get; set; } - public string RoleName { get; set; } - } -} diff --git a/msvs/RedisWAInst/src/RedisServer/Program.cs b/msvs/RedisWAInst/src/RedisServer/Program.cs deleted file mode 100644 index f7a3b5ad..00000000 --- a/msvs/RedisWAInst/src/RedisServer/Program.cs +++ /dev/null @@ -1,138 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Principal; -using System.Text; - -namespace RedisInstWA -{ - class Program - { - // values from input args - static string GitUrl; - static string LocalExePath; - static bool IsLocal; - static string ConfigFolderPath; - static string RedisConfPath; - static bool IsEmul; - static string Domain; - static string Subscription; - - /// - /// Prepare and initiate install of Redis to Azure - /// - /// - static void Main(string[] args) - { - - if (!IsElevated || (args == null) || (args.Count() == 0)) - { - Usage(); - } - else - { - if (!ValidateArgs(args)) - { - Usage(); - Environment.Exit(1); - } - // Download and extract exe from zip file or copy local exe - PrepareBinaries(); - // Prepare instances and xml file for Inst4WA - PrepareInstaller(); - // run Inst4WA to do install - RunInstaller(); - } - } - - private static bool ValidateArgs(string[] args) - { - for (int i = 0; i < args.Length; i++) - { - if (args[i].StartsWith("-So", StringComparison.InvariantCultureIgnoreCase)) - { - i++; - if (args[i].StartsWith("-", StringComparison.InvariantCultureIgnoreCase)) - { - Console.WriteLine("Source url or path not valid " + args[i]); - return false; - } - if (args[i].StartsWith("http", StringComparison.InvariantCultureIgnoreCase)) - { - } - } - else if (args[i].StartsWith("-Co", StringComparison.InvariantCultureIgnoreCase)) - { - i++; - } - else if (args[i].StartsWith("-Re", StringComparison.InvariantCultureIgnoreCase)) - { - i++; - } - else if (args[i].StartsWith("-Em", StringComparison.InvariantCultureIgnoreCase)) - { - - } - else if (args[i].StartsWith("-Do", StringComparison.InvariantCultureIgnoreCase)) - { - i++; - } - else if (args[i].StartsWith("-Su", StringComparison.InvariantCultureIgnoreCase)) - { - i++; - } - else - { - Console.WriteLine("Unknown option specified " + args[i]); - return false; - } - } - } - - private static void PrepareBinaries() - { - } - - private static void PrepareInstaller() - { - } - - private static void RunInstaller() - { - } - - private static bool IsElevated - { - get - { - return new WindowsPrincipal - (WindowsIdentity.GetCurrent()).IsInRole - (WindowsBuiltInRole.Administrator); - } - } - - private static void Usage() - { - string msg = "RedisInstWA installs Redis to Windows Azure.\r\n" + - "RedisInstWA -Source | \r\n" + - " -Config \r\n" + - " -RedisConf \r\n" + - " -Emu | -Domain -Subscription \r\n" + - "Where:\r\n" + - ": URL to download such as 'https://github.com/MSOpenTech/redis/archive/2.4.zip'\r\n" + - ": local path to redis executables to deploy\r\n" + - ": local path to .csdef file specifying Master and Slave roles\r\n" + - "-Emu: Use this if deploying to emulator\r\n" + - ": Unique name to be used to create the service to be deployed\r\n" + - ": Windows Azure subscription name\r\n" + - "\r\n" + - "Notes:\r\n" + - "Only the first 2 characters of each option are needed (-So is same as -Source)\r\n" + - "The installer must be run with elevated Administrator privileges\r\n" + - "Specify one redis.conf for all instances.\r\n" + - " For each instance the port number is appended. For each slave, the master endpoint is appended\r\n" + - "\r\n"; - Console.WriteLine(msg); - } - } -} diff --git a/msvs/RedisWAInst/src/RedisServer/Properties/AssemblyInfo.cs b/msvs/RedisWAInst/src/RedisServer/Properties/AssemblyInfo.cs deleted file mode 100644 index 87828b38..00000000 --- a/msvs/RedisWAInst/src/RedisServer/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("RedisMaster")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("RedisMaster")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("453cf019-2835-414d-ba76-dc036b86aa9e")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/msvs/RedisWAInst/src/RedisServer/RedisServer.csproj b/msvs/RedisWAInst/src/RedisServer/RedisServer.csproj deleted file mode 100644 index bc31ceec..00000000 --- a/msvs/RedisWAInst/src/RedisServer/RedisServer.csproj +++ /dev/null @@ -1,129 +0,0 @@ - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {8724EBEA-6875-4BCD-A538-30428EDABF27} - Library - Properties - RedisServer - RedisServer - v4.0 - 512 - Worker - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - - - - - - - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - AllRules.ruleset - - - - False - ..\..\..\..\..\RamWorks\WindowsAzure2\packages\Microsoft.WindowsAzure.ConfigurationManager.1.8.0.0\lib\net35-full\Microsoft.WindowsAzure.Configuration.dll - - - False - ..\..\..\..\..\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\2012-10\ref\Microsoft.WindowsAzure.Diagnostics.dll - - - False - ..\..\..\..\..\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\2012-10\ref\Microsoft.WindowsAzure.ServiceRuntime.dll - - - - - - - - - - - - - - - - - Always - - - - - False - Microsoft .NET Framework 4 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - false - - - False - Windows Installer 3.1 - true - - - - - XCOPY /Y/I/Q "$(ProjectDir)$(OutDir)*.dll" "$(SolutionDir)RedisInstBin\RedisPkgBin" -XCOPY /Y/I/Q "$(ProjectDir)$(OutDir)*.xml" "$(SolutionDir)RedisInstBin\RedisPkgBin" -XCOPY /Y/I/Q "$(ProjectDir)$(OutDir)*.pdb" "$(SolutionDir)RedisInstBin\RedisPkgBin" -XCOPY /Y/I/Q "$(ProjectDir)$(OutDir)startup.cmd" "$(SolutionDir)RedisInstBin\RedisPkgBin" - - - - \ No newline at end of file diff --git a/msvs/RedisWAInst/src/RedisServer/WorkerRole.cs b/msvs/RedisWAInst/src/RedisServer/WorkerRole.cs deleted file mode 100644 index 6e523b99..00000000 --- a/msvs/RedisWAInst/src/RedisServer/WorkerRole.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Diagnostics; -using System.IO; -using System.Net; -using System.Threading; -using Microsoft.WindowsAzure.ServiceRuntime; - -namespace RedisServer -{ - public class WorkerRole : RoleEntryPoint - { - public override void Run() - { - Trace.WriteLine("Redis Server entry point called", "Information"); - - while (true) - { - Thread.Sleep(10000); - Trace.WriteLine("Working", "Information"); - } - } - - public override bool OnStart() - { - // Set the maximum number of concurrent connections - ServicePointManager.DefaultConnectionLimit = 12; - - RedisStart(); - - return base.OnStart(); - } - - private void RedisStart() - { - string redisConfig = "redis.conf"; - string redisServer = "release\\redis-server.exe"; - - string cmdLine = String.Format("{0} {1}", redisServer, redisConfig); - - ExecuteShellCommand(cmdLine, false); - } - - private Process ExecuteShellCommand(String command, bool waitForExit, String workingDir = null) - { - Process processToExecuteCommand = new Process(); - - processToExecuteCommand.StartInfo.FileName = "cmd.exe"; - if (workingDir != null) - { - processToExecuteCommand.StartInfo.WorkingDirectory = workingDir; - } - - processToExecuteCommand.StartInfo.Arguments = @"/C " + command; - processToExecuteCommand.StartInfo.RedirectStandardInput = true; - processToExecuteCommand.StartInfo.RedirectStandardError = true; - processToExecuteCommand.StartInfo.RedirectStandardOutput = true; - processToExecuteCommand.StartInfo.UseShellExecute = false; - processToExecuteCommand.StartInfo.CreateNoWindow = true; - processToExecuteCommand.EnableRaisingEvents = false; - processToExecuteCommand.OutputDataReceived += new DataReceivedEventHandler(processToExecuteCommand_OutputDataReceived); - processToExecuteCommand.ErrorDataReceived += new DataReceivedEventHandler(processToExecuteCommand_ErrorDataReceived); - processToExecuteCommand.Start(); - - processToExecuteCommand.BeginOutputReadLine(); - processToExecuteCommand.BeginErrorReadLine(); - - if (waitForExit == true) - { - processToExecuteCommand.WaitForExit(); - processToExecuteCommand.Close(); - processToExecuteCommand.Dispose(); - processToExecuteCommand = null; - } - - return processToExecuteCommand; - } - - private void processToExecuteCommand_ErrorDataReceived(object sender, DataReceivedEventArgs e) - { - Trace.WriteLine(e.Data, "Information"); - } - - private void processToExecuteCommand_OutputDataReceived(object sender, DataReceivedEventArgs e) - { - Trace.WriteLine(e.Data, "Information"); - } - } -} diff --git a/msvs/RedisWAInst/src/RedisServer/app.config b/msvs/RedisWAInst/src/RedisServer/app.config deleted file mode 100644 index 6420dad4..00000000 --- a/msvs/RedisWAInst/src/RedisServer/app.config +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/msvs/RedisWAInst/src/RedisServer/startup.cmd b/msvs/RedisWAInst/src/RedisServer/startup.cmd deleted file mode 100644 index c2197ed5..00000000 --- a/msvs/RedisWAInst/src/RedisServer/startup.cmd +++ /dev/null @@ -1,2 +0,0 @@ -@echo off -netsh advfirewall firewall add rule name="redis" dir=in action=allow enable=yes program="release\\redis-server.exe" \ No newline at end of file diff --git a/msvs/RedisWAInst/src/RedisWAInst.sln b/msvs/RedisWAInst/src/RedisWAInst.sln deleted file mode 100644 index 972f0d41..00000000 --- a/msvs/RedisWAInst/src/RedisWAInst.sln +++ /dev/null @@ -1,54 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RedisDeployCmdlets", "RedisDeployCmdlets\RedisDeployCmdlets.csproj", "{2F9BEF35-EB38-41C1-9A2E-136702720EE9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RedisServer", "RedisServer\RedisServer.csproj", "{8724EBEA-6875-4BCD-A538-30428EDABF27}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RedisInstWA", "RedisInstWA\RedisInstWA.csproj", "{C8A325BB-0BF9-4A53-941E-3A84C2B27124}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|Mixed Platforms = Debug|Mixed Platforms - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|Mixed Platforms = Release|Mixed Platforms - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2F9BEF35-EB38-41C1-9A2E-136702720EE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2F9BEF35-EB38-41C1-9A2E-136702720EE9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2F9BEF35-EB38-41C1-9A2E-136702720EE9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {2F9BEF35-EB38-41C1-9A2E-136702720EE9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {2F9BEF35-EB38-41C1-9A2E-136702720EE9}.Debug|x86.ActiveCfg = Debug|Any CPU - {2F9BEF35-EB38-41C1-9A2E-136702720EE9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2F9BEF35-EB38-41C1-9A2E-136702720EE9}.Release|Any CPU.Build.0 = Release|Any CPU - {2F9BEF35-EB38-41C1-9A2E-136702720EE9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {2F9BEF35-EB38-41C1-9A2E-136702720EE9}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {2F9BEF35-EB38-41C1-9A2E-136702720EE9}.Release|x86.ActiveCfg = Release|Any CPU - {8724EBEA-6875-4BCD-A538-30428EDABF27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8724EBEA-6875-4BCD-A538-30428EDABF27}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8724EBEA-6875-4BCD-A538-30428EDABF27}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {8724EBEA-6875-4BCD-A538-30428EDABF27}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {8724EBEA-6875-4BCD-A538-30428EDABF27}.Debug|x86.ActiveCfg = Debug|Any CPU - {8724EBEA-6875-4BCD-A538-30428EDABF27}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8724EBEA-6875-4BCD-A538-30428EDABF27}.Release|Any CPU.Build.0 = Release|Any CPU - {8724EBEA-6875-4BCD-A538-30428EDABF27}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {8724EBEA-6875-4BCD-A538-30428EDABF27}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {8724EBEA-6875-4BCD-A538-30428EDABF27}.Release|x86.ActiveCfg = Release|Any CPU - {C8A325BB-0BF9-4A53-941E-3A84C2B27124}.Debug|Any CPU.ActiveCfg = Debug|x86 - {C8A325BB-0BF9-4A53-941E-3A84C2B27124}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {C8A325BB-0BF9-4A53-941E-3A84C2B27124}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {C8A325BB-0BF9-4A53-941E-3A84C2B27124}.Debug|x86.ActiveCfg = Debug|x86 - {C8A325BB-0BF9-4A53-941E-3A84C2B27124}.Debug|x86.Build.0 = Debug|x86 - {C8A325BB-0BF9-4A53-941E-3A84C2B27124}.Release|Any CPU.ActiveCfg = Release|x86 - {C8A325BB-0BF9-4A53-941E-3A84C2B27124}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {C8A325BB-0BF9-4A53-941E-3A84C2B27124}.Release|Mixed Platforms.Build.0 = Release|x86 - {C8A325BB-0BF9-4A53-941E-3A84C2B27124}.Release|x86.ActiveCfg = Release|x86 - {C8A325BB-0BF9-4A53-941E-3A84C2B27124}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/msvs/install/ReadMe.txt b/msvs/install/ReadMe.txt deleted file mode 100644 index 3f5ccf88..00000000 --- a/msvs/install/ReadMe.txt +++ /dev/null @@ -1,16 +0,0 @@ -This solution contains projects for building MSI installer for 32 bit Redis and 64 bit Redis. - -The actual binaries to be included in the MSI must be placed in subfolders before building the projects. - -Place binaries for the 32 bit Redis installer in folder 'x32'. -Place binaries for the 64 bit Redis installer in folder 'x64'. - -The files that should be placed in each of these folders are: -redis-server.exe -redis-cli.exe -redis-check-aof.exe -redis-check-dump.exe -redis.conf -RedisWatcher.exe -RedisWatcher.man -watcher.conf diff --git a/msvs/install/Redis32.wxs b/msvs/install/Redis32.wxs deleted file mode 100644 index 31a47654..00000000 --- a/msvs/install/Redis32.wxs +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - "1"]]> - - 1 - - NOT Installed - Installed AND PATCH - - 1 - 1 - NOT WIXUI_DONTVALIDATEPATH - "1"]]> - WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1" - 1 - 1 - - NOT Installed - Installed AND NOT PATCH - Installed AND PATCH - - 1 - - 1 - 1 - 1 - - - - - - - - - - - - 1 - "1"]]> - - - - 1 - - - - - - - - - - - - - - - - - diff --git a/msvs/install/Redis64.wxs b/msvs/install/Redis64.wxs deleted file mode 100644 index 9733fd00..00000000 --- a/msvs/install/Redis64.wxs +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - "1"]]> - - 1 - - NOT Installed - Installed AND PATCH - - 1 - 1 - NOT WIXUI_DONTVALIDATEPATH - "1"]]> - WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1" - 1 - 1 - - NOT Installed - Installed AND NOT PATCH - Installed AND PATCH - - 1 - - 1 - 1 - 1 - - - - - - - - - - - - 1 - "1"]]> - - - - 1 - - - - - - - - - - - - - - - - - diff --git a/msvs/install/RedisInstall.sln b/msvs/install/RedisInstall.sln deleted file mode 100644 index 3e1484c1..00000000 --- a/msvs/install/RedisInstall.sln +++ /dev/null @@ -1,39 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "RedisInstall32", "RedisInstall32.wixproj", "{1A7F424E-5966-45C9-A96D-D77E5CC25F50}" -EndProject -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "RedisInstall64", "RedisInstall64.wixproj", "{39F87998-996A-4EAA-B3A4-BC12C2C80EFA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B7790A41-1B9D-4758-9290-21B1FE13BD01}" - ProjectSection(SolutionItems) = preProject - ReadMe.txt = ReadMe.txt - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1A7F424E-5966-45C9-A96D-D77E5CC25F50}.Debug|x64.ActiveCfg = Debug|x86 - {1A7F424E-5966-45C9-A96D-D77E5CC25F50}.Debug|x86.ActiveCfg = Debug|x86 - {1A7F424E-5966-45C9-A96D-D77E5CC25F50}.Debug|x86.Build.0 = Debug|x86 - {1A7F424E-5966-45C9-A96D-D77E5CC25F50}.Release|x64.ActiveCfg = Release|x86 - {1A7F424E-5966-45C9-A96D-D77E5CC25F50}.Release|x86.ActiveCfg = Release|x86 - {1A7F424E-5966-45C9-A96D-D77E5CC25F50}.Release|x86.Build.0 = Release|x86 - {39F87998-996A-4EAA-B3A4-BC12C2C80EFA}.Debug|x64.ActiveCfg = Debug|x64 - {39F87998-996A-4EAA-B3A4-BC12C2C80EFA}.Debug|x64.Build.0 = Debug|x64 - {39F87998-996A-4EAA-B3A4-BC12C2C80EFA}.Debug|x86.ActiveCfg = Debug|x64 - {39F87998-996A-4EAA-B3A4-BC12C2C80EFA}.Debug|x86.Build.0 = Debug|x86 - {39F87998-996A-4EAA-B3A4-BC12C2C80EFA}.Release|x64.ActiveCfg = Release|x64 - {39F87998-996A-4EAA-B3A4-BC12C2C80EFA}.Release|x64.Build.0 = Release|x64 - {39F87998-996A-4EAA-B3A4-BC12C2C80EFA}.Release|x86.ActiveCfg = Release|x64 - {39F87998-996A-4EAA-B3A4-BC12C2C80EFA}.Release|x86.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/msvs/install/RedisInstall32.wixproj b/msvs/install/RedisInstall32.wixproj deleted file mode 100644 index bdb7441f..00000000 --- a/msvs/install/RedisInstall32.wixproj +++ /dev/null @@ -1,46 +0,0 @@ - - - - Debug - x86 - 3.7 - {1a7f424e-5966-45c9-a96d-d77e5cc25f50} - 2.0 - RedisInstall32 - Package - $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets - $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets - RedisInstall32 - - - bin\$(Configuration)\ - obj\$(Configuration)\ - Debug - - - bin\$(Configuration)\ - obj\$(Configuration)\ - - - - - - - $(WixExtDir)\WixUtilExtension.dll - WixUtilExtension - - - $(WixExtDir)\WixUIExtension.dll - WixUIExtension - - - - - \ No newline at end of file diff --git a/msvs/install/RedisInstall64.wixproj b/msvs/install/RedisInstall64.wixproj deleted file mode 100644 index c9e53186..00000000 --- a/msvs/install/RedisInstall64.wixproj +++ /dev/null @@ -1,54 +0,0 @@ - - - - Debug - x86 - 3.7 - {39f87998-996a-4eaa-b3a4-bc12c2c80efa} - 2.0 - RedisInstall64 - Package - $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets - $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets - - - bin\$(Configuration)\ - obj\$(Configuration)\ - Debug - - - bin\$(Configuration)\ - obj\$(Configuration)\ - - - Debug - bin\$(Platform)\$(Configuration)\ - obj\$(Configuration)\ - - - bin\$(Configuration)\ - obj\$(Configuration)\ - - - - - - - $(WixExtDir)\WixUtilExtension.dll - WixUtilExtension - - - $(WixExtDir)\WixUIExtension.dll - WixUIExtension - - - - - \ No newline at end of file