物事を機能させるために私がしたことは次のとおりです。
開発マシン (Win8/Studio2012) とサーバー (Win2k8R2) の両方で同じローカル ユーザー アカウントの作成を開始しました。上記で参照されているクライアント証明書をエクスポートし (実際には 2 ~ 3 回)、必要に応じてインポートしました。良好な接続が機能するようになると、物事を後退させ始めました。Win8ボックスなどのローカルアカウントを削除すると、すべてが魔法のように機能し始めました。
私の環境についていくつか。これらすべてを VMWare Fusion で行っています。(そうフュージョン)。VM マシンはすべてネットワーク上で NAT を使用して構成されており、静的 IP は使用されていません。
方法はわかりませんが、機能しています。私は最初にメッセージだけをしました。メッセージを機能させることができれば、Pub/Sub トピックを追跡できます... 次はそれです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Messaging;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using System.Diagnostics;
using System.Security;
namespace Test_Service_Bus
{
public static class Util
{
public static void SetCertificatePolicy()
{
ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate;
}
private static bool RemoteCertificateValidate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
{
System.Console.WriteLine("Warning, trust any certificate");
return true;
}
}
class Program
{
static string ServerFQDN = "SVRNICK"; //System.Net.Dns.GetHostEntry(string.Empty).HostName;
static int HttpPort = 9355;
static int TcpPort = 9354;
static string ServiceNameSpace = "ServiceBusDefaultNamespace";
const string QueueName = "ServiceBusQueueSample";
static void Main(string[] args)
{
SDKVersion();
}
static void SDKVersion()
{
ServiceBusConnectionStringBuilder connBuilder = new ServiceBusConnectionStringBuilder();
connBuilder.ManagementPort = HttpPort;
connBuilder.RuntimePort = TcpPort;
connBuilder.Endpoints.Add(new UriBuilder() { Scheme = "sb", Host = ServerFQDN, Path = ServiceNameSpace }.Uri);
connBuilder.StsEndpoints.Add(new UriBuilder() { Scheme = "https", Host = ServerFQDN, Port = HttpPort, Path = ServiceNameSpace }.Uri);
TokenProvider localUserTokenProvider = WindowsTokenProvider.CreateWindowsTokenProvider(connBuilder.StsEndpoints, new System.Net.NetworkCredential("ServerLocalAcct", "ServerLocalPassword"));
MessagingFactory messageFactory = MessagingFactory.Create(connBuilder.GetAbsoluteRuntimeEndpoints(), localUserTokenProvider);
NamespaceManager namespaceManager = new NamespaceManager(connBuilder.GetAbsoluteManagementEndpoints(), localUserTokenProvider);
NamespaceManager.CreateFromConnectionString(connBuilder.ToString());
if (namespaceManager == null)
{
Console.WriteLine("\nUnexpected error: NamespaceManager is NULL");
return;
}
Console.WriteLine("Checking if queue exists");
if (namespaceManager.QueueExists(QueueName))
{
Console.WriteLine("Queue exists, let's delete it so we can start over again");
namespaceManager.DeleteQueue(QueueName);
}
Console.WriteLine("And create a new queue");
namespaceManager.CreateQueue(QueueName);
// create a message client
QueueClient myQueueClient = messageFactory.CreateQueueClient(QueueName);
Console.WriteLine("Feeding messages");
for (int i = 0; i < 1000; i++)
{
if (i % 100 == 0)
Console.WriteLine("Messages sent: {0}", i.ToString());
// send to message broker
using (BrokeredMessage sendMessage = new BrokeredMessage("Hello world. " + i.ToString()))
{
sendMessage.Label = "Label_" + i.ToString(); ;
myQueueClient.Send(sendMessage);
}
}
BrokeredMessage receivedMessage = myQueueClient.Receive(TimeSpan.FromSeconds(5));
while (receivedMessage != null)
{
Console.WriteLine(string.Format("Message Received: Body={0}", receivedMessage.GetBody<string>()));
receivedMessage.Complete();
receivedMessage = myQueueClient.Receive(TimeSpan.FromSeconds(5));
}
// Close things down.
Console.WriteLine("Closing down message");
if (messageFactory != null)
{
messageFactory.Close();
}
}
}
}