私は非常に奇妙な問題と戦っています... Windows 7 Ultimate上の.NET 4.0を使用して、WCFサービス間のサービスバス通信(MassTransit + MSMQ経由)を実装しました。サービスが起動すると、すべてが正常に機能し、お互いにメッセージを受信しますが、特定の時点で、コンピューターの管理 -> サービスとアプリケーション -> メッセージ キュー -> でプライベート キューを手動で削除するまで、サービスは受信しません。 > プライベート キュー。
各サービスごとに、MassTransit を構成するブートストラップがあります。
// Bootstrapper configuration
public void Configure(IUnityContainer container)
{
// Service bus configuration
var config = ConfigurationDataAccess.GetSupervisionServiceConfig();
// Cleaning up the former Private Queues before to start the service
var privateQueues = MessageQueue.GetPrivateQueuesByMachine(System.Environment.MachineName);
foreach (var messageQueue in privateQueues)
{
try
{
if (messageQueue.QueueName.Contains("supervisionservice"))
{
MessageQueue.Delete(messageQueue.Path);
}
}
catch (MessageQueueException)
{
// An exception has occurred trying to remove a private message queue.
}
}
// Initializing MassTransit
var bus = ServiceBusFactory.New(sbc =>
{
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
sbc.UseMulticastSubscriptionClient();
sbc.ReceiveFrom(config.ServiceBusReceiveFromAddress);
});
container.RegisterInstance(bus);
//Start the service...
}
}
次に、サービスのメイン クラスが MassTransit を拡張します。以下に例を示します。
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class DataService : Consumes<ServiceMessage>.Selected
{
public DataService()
{
// The service bus object takes the instance from the bootstrapper through the dependency
// injection of the Unity.
ServiceBus.SubscribeInstance(this);
}
public bool Accept(ServiceMessage message)
{
// For an easy explanation
return true;
}
public void Consume(ServiceMessage message)
{
// Treat the message
}
public void SendMessage(ServiceMessage message)
{
// Publish the message over the service bus
ServiceBus.Publish(message);
}
}
説明したように、特定の時点で Accept メソッドは呼び出されなくなります。唯一の方法は、プライベート キューを手動で削除し、サービスを再起動することです。その後、次のトラブルまで、システムは再び正常に動作します :-(.
どんな提案でも大歓迎です。
どうもありがとう!アレッサンドロ