2013-05-01 91 views
1

我們有一個使用NetMessagingBinding監聽Azure服務總線隊列的WCF服務。然而,我們發現有時服務似乎在消息到達時不會被通知,即我們看到隊列已經建立,但是我們的實例沒有一個處理消息。爲什麼我們使用NetMessagingBinding監聽Azure服務總線隊列的服務會停止接收消息?

如果我們重新啓動實例,它們會立即開始從隊列中再次接收消息。

這將打開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> 

任何想法?

+0

直到服務停止接收消息需要多長時間? – TheDude 2013-05-01 20:03:43

+0

這取決於它有時候會在幾個小時後有時會持續一天,有時它根本不會發生。 – 2013-05-02 08:42:52

+0

我遇到了同樣的問題 - 最終是否找到解決方案? – AndyMoose 2015-08-24 16:01:51

回答

0

從你所描述的情況來看,這聽起來像你可能是你的IIS配置的受害者:你需要確保iis沒有被配置爲自動回收你的應用程序池來運行你的應用程序。如果您還沒有在iis中配置應用程序初始化,您的服務將不會自動重啓並恢復處理消息