2013-04-02 22 views
1

目前,我們在設置WCF服務以連接到tibco EMS服務器時存在問題。當在單實例模式下運行服務時(由於應用程序運行的方式,我們不能改變它),即使它只處理了一條消息,它也會始終確認2條消息 - 這會導致某些消息被跳過。在ConcurrencyMode.Single模式下使用Tibco EMS WCF進行重複ACK

[ServiceBehavior(
    ConcurrencyMode = ConcurrencyMode.Single, 
    InstanceContextMode = InstanceContextMode.Single, 
    Namespace = "http://tempuri.org/test")] 
public class MyService : IMyService 

我已經通過TIBCO EMS WCF代碼加強,可以看到有2條消息在底層TIBCO.EMS.Session類的私人_deliveredList領域,都標有需要ACK,即使我只有處理了一條消息。隊列中有多少條消息似乎並不重要,如果長度大於一條,它總是會進行兩次確認。

我已經應用了以下配置的限制,但它似乎對發送的初始消息的數量沒有任何影響。

任何幫助將非常感激。

+0

您正在使用什麼消息確認模式(例如,CLIENT_ACKNOWLEDGE,AUTO_ACKNOWLEDGE等)? –

+0

我正在使用CLIENT_ACKNOWLEDGE。 –

回答

1

看起來這只是Tibco在處理CLIENT_ACKNOWLEDGE時與WCF組件執行不力而已。由於會話對象被抽象的事實,你不能確定你沒有訪問的東西。

選項如下:

  • 設置預取隊列設置爲1
  • 使用EXPLICIT_CLIENT_ACKNOWLEDGE

也存在其中,如果你拋出一個異常沒有一個疑難雜症確認它會卡在隊列中。