Hello,
I'm registering a WCF service endpoint on the Windows Azure Service Bus using the NetTcpRelayBinding.
Now I want to monitor the connection state to the Windows Azure Service Bus with help of the Microsoft.ServiceBus.ConnectionStatusBehavior [1]. Based on the description in the "Remarks"-section I expected to receive events every time the connection
is lost and reestablished - i.e. the Connecting-Event when the connection was lost and the channels trying to reconnect and the Online-Event after successfully reestablishing the connection.
The problem: I only receive the Online-Event once after a connection to the Service Bus has been established for the first time. After that I only receive the Connecting-Event every time the connection is lost (I disabled the network adapter to cause the disconnect).
Hopefully someone with more knowledge can point me in the right direction!
I use the following code to (programmatically) set up the ServiceHost:
class Program
{
const string Namespace = "**********";
const string SharedAccessKeyName = "RootManageSharedAccessKey";
const string SharedAccessKey = "**********";
static readonly TokenProvider TokenProvider =
TokenProvider.CreateSharedAccessSignatureTokenProvider(SharedAccessKeyName, SharedAccessKey);
static void Main()
{
var sh = new ServiceHost(typeof(MessageService));
sh.Faulted += (s, e) => Console.WriteLine("ServiceHost faulted");
// add service endpoint
var address = ServiceBusEnvironment.CreateServiceUri("sb", Namespace, "servicepath123");
var binding = new NetTcpRelayBinding(EndToEndSecurityMode.Transport, RelayClientAuthenticationType.None);
var endpoint = sh.AddServiceEndpoint(typeof(IMessageService), binding, address);
// add endpoint behaviors
endpoint.Behaviors.Add(new TransportClientEndpointBehavior(TokenProvider));
var connectionStatusBehavior = new ConnectionStatusBehavior();
connectionStatusBehavior.Connecting += (s, e) => Console.WriteLine("Connecting");
connectionStatusBehavior.Online += (s, e) => Console.WriteLine("Online");
connectionStatusBehavior.Offline += (s, e) => Console.WriteLine("Offline");
endpoint.Behaviors.Add(connectionStatusBehavior);
sh.Open();
Console.WriteLine("Press ENTER to close");
Console.ReadLine();
sh.Close();
}
}