2011-08-09 82 views
1

海蘭,所有。WCF netmsmq事務服務

我有一個有趣的案例。我試圖創建一個基於Windows服務應用程序託管的netmsmq綁定的wcf服務客戶端通信。 因此,我發現我的主機服務存在問題 - 它無法接收來自隊列的任何消息。 MSDTC顯示事務回滾。經過一些嘗試後,消息正在進入重試子隊列。 ServiceHost成爲失敗狀態,並在我再次開始後一次又一次失敗。 因此,在主機應用程序中,我除了主機故障狀態外,沒有任何例外情況。 我有兩項合同的服務(如果它很重要)。

[ServiceContract] 
public interface IService 
{ 
    [OperationContract(IsOneWay = true)] 
    void Send1(MyDataContract data); 

    [OperationContract(IsOneWay = true)] 
    void Send2(MyDataContract data); 
} 
[DataContract] 
public class MyDataContract 
{ 
    [DataMember] 
    public string From { get; set; } 
    [DataMember] 
    public string Host { get; set; } 
    [DataMember] 
    public string To { get; set; } 
    [DataMember] 
    public DateTime SendTime { get; set; } 
} 

一些服務實現

[OperationBehavior(TransactionScopeRequired = true, 
       TransactionAutoComplete = true)] 
public void Send1(MyDataContract dc) 
{......} 

服務配置:

<端點地址= 「net.msmq://本地主機/私營/爲MyService」 綁定= 「netMsmqBinding」 合同=「IService 「bindingConfiguration =」 NetMsmqBinding_IService」/>

消息在隊列 - 客戶服務工作正常。 所以在運行時,服務主機的方法Send1永遠不會執行。但是,在將消息從重試子隊列移入傳入隊列後,我會處理HostFaulted事件。這就是我所能說的。

有幫助嗎?

+0

這是很難從上面的描述中設想的問題。如果可能的話,請提供錯誤和代碼。 –

+0

我剛剛添加更多信息。它有幫助嗎? – cyssima

+0

你可以發佈NetMsmqBinding_IService的綁定配置嗎?我懷疑這不是設置爲Transactional,其中您的隊列具有事務屬性集。 – DaveRead

回答

0

所以,我和他們呆一天發現問題。所以一步一步: 1.我已經有了MSMQ WCF微軟樣品 2.我發現沒有什麼區別 3.我理解,我有大的消息(較大1MB),因此默認情況下WCF可以,不能反序列化這樣的大消息。這是neccessary設置maxBufferPoolSizemaxReceivedMessageSize

但是,這是問題 - 爲什麼WCF客戶端successfuly發這麼大的消息,而無需任何擴展配置:)

我的建議:在WCF組封裝尺寸和池最大可能爲你(如果只有你使用該服務)。