問題: Azure ストレージ エミュレーターは BLOB とテーブル ストレージを開始できますが、キュー ストレージは開始できず、エラー ダイアログが表示されます。環境ストレージ クライアント。これが私がやったことです...
ポート 10001 は Queue Storage のデフォルト ポートであるため、私が行ったいくつかの関連記事に基づいています (出力の最後の列はプロセスの PID です)。
c:\...> netstat -p tcp -ano | findstr :1000
TCP 0.0.0.0:10001 0.0.0.0:0 LISTENING 2628
TCP 127.0.0.1:10000 0.0.0.0:0 LISTENING 4
TCP 127.0.0.1:10002 0.0.0.0:0 LISTENING 4
ここでの大きな問題は、10001 でリッスンしているのは McAfee であり、それを変更できないことです。
次の手順では、10001 を使用しないようにキュー ストレージを再構成します。使用可能なポートでリッスンするようにストレージ エミュレーターを再構成します。開ける:
%PROGRAMFILES%\Microsoft SDKs\Windows Azure\Emulator\devstore\DSServiceLDB.exe.config
お気に入りのテキスト エディターで、キュー ストレージのバインドを変更します。私の場合、10003 が利用可能でした。
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="developmentStorageConfig" type="Microsoft.ServiceHosting.DevelopmentStorage.Utilities.DevelopmentStorageConfigurationHandler, DevelopmentStorage.Common"/>
</configSections>
<developmentStorageConfig>
<services>
<service name="Blob" url="http://127.0.0.1:10000/"/>
<service name="Queue" url="http://127.0.0.1:10003/"/> <!-- this line here -->
<service name="Table" url="http://127.0.0.1:10002/"/>
</services>
...
shutodwn を実行してストレージ エミュレーターを起動すると、すべて正常に動作するはずです。
c:\...netstat -p tcp -ano | findstr :1000
TCP 0.0.0.0:10001 0.0.0.0:0 LISTENING 2628
TCP 127.0.0.1:10000 0.0.0.0:0 LISTENING 4
TCP 127.0.0.1:10002 0.0.0.0:0 LISTENING 4
TCP 127.0.0.1:10003 0.0.0.0:0 LISTENING 4
現在、VS2012 でクライアントを構成しようとしても機能しません...次の設定で構成ファイル ServiceConfiguration.Cloud.cscfg を変更しました。
<Setting name="StorageConnectionString" value="BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10003/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount;AccountName=devstoreaccount;AccountKey=key copied from storage config file" />
しかし、キューに接続しようとすると 404 が返され、存在しない場合は create を呼び出します。
storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
queueClient = storageAccount.CreateCloudQueueClient();
queue = queueClient.GetQueueReference("testqueue");
queue.CreateIfNotExist();
これを少し調整した後...開発設定を使用している場合にストレージクライアントが何をしているかを調べ、System.Diagnostics.Debugger.IsAttachedブロックでコードを複製しました。また、キューの名前付けが悪いことに気付きました (クライアントを接続すると、400 エラーが返されました)。
if (System.Diagnostics.Debugger.IsAttached)
{
var blobEndpoint = new Uri("http://127.0.0.1:10000/devstoreaccount1");
var queueEndpoint = new Uri("http://127.0.0.1:10003/devstoreaccount1");
var tableEndpoint = new Uri("http://127.0.0.01:10002/devstoreaccount1");
var storageCreds = new StorageCredentialsAccountAndKey("devstoreaccount1", "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==");
_storageAccount = new CloudStorageAccount(storageCreds, blobEndpoint, queueEndpoint, tableEndpoint);
}
else
{
_storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
}
_queueClient = _storageAccount.CreateCloudQueueClient();
/* Queue naming rules:
* 1. A queue name must start with a letter or number, and can only contain letters, numbers, and the dash (-) character.
2. The first and last letters in the queue name must be alphanumeric. The dash (-) character cannot be the first or last character. Consecutive dash characters are not permitted in the queue name.
3. All letters in a queue name must be lowercase.
4. A queue name must be from 3 through 63 characters long.
*/
_queue = _queueClient.GetQueueReference("myqueuename");
_queue.CreateIfNotExist();