为什么使用NetMessagingBinding监听Azure服务总线队列的服务会停止接收消息?

时间:2013-05-01 06:21:19

标签: wcf azure wcf-binding azureservicebus

我们有一个WCF服务,它使用NetMessagingBinding侦听Azure servicebus队列。然而,我们发现有时服务似乎在消息到达时似乎停止被通知,即我们看到队列建立但我们的实例都没有处理消息。

如果我们然后重启实例,他们会立即再次从队列中接收消息。

以我们的辅助角色打开WCF服务的代码:

var endpoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(ICacheKeyExchangeWithSession)))
{
    Address = new EndpointAddress(new Uri(baseAddress + QueueNames.Cache)), 
    Binding = new NetMessagingBinding(), 
};

var endpointBehavior = new TransportClientEndpointBehavior
{
    TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(id, secret), 
};

endpoint.EndpointBehaviors.Add(endpointBehavior);
host = new ServiceHost(typeof(DataService), new Uri[] { });
host.AddServiceEndpoint(endpoint);
host.Open();

我们在app.config中没有针对NetMessagingBinding的具体配置:

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<extensions>
  <behaviorExtensions>
    <add name="transportClientEndpointBehavior" type="Microsoft.ServiceBus.Configuration.TransportClientEndpointBehaviorElement, Microsoft.ServiceBus, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </behaviorExtensions>
  <bindingElementExtensions>
    <add name="netMessagingTransport" type="Microsoft.ServiceBus.Messaging.Configuration.NetMessagingTransportExtensionElement, Microsoft.ServiceBus, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </bindingElementExtensions>
  <bindingExtensions>
    <add name="netMessagingBinding" type="Microsoft.ServiceBus.Messaging.Configuration.NetMessagingBindingCollectionElement, Microsoft.ServiceBus, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </bindingExtensions>
</extensions>
</system.serviceModel>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

根据您的描述,您可能会成为IIS配置的受害者:您需要确保iis未配置为自动回收运行应用程序的应用程序池。如果您还没有在iis中配置应用程序初始化,则您的服务将不会自动重启并继续处理消息