wcf netmsmq交易服务

时间:2011-08-09 08:29:22

标签: wcf transactions msmq

Hy,all。

我有一个有趣的案例。我试图基于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)
{......}

服务配置:

< endpoint address =“net.msmq:// localhost / private / myservice”binding =“netMsmqBinding”contract =“IService”bindingConfiguration =“NetMsmqBinding_IService”/>

消息在队列中 - 客户端服务正常工作。 因此在运行时方法中,服务主机的Send1永远不会执行。但是我将消息从重试子队列移动到传入队列后处理HostFaulted事件。这就是我所能说的。

任何帮助?

1 个答案:

答案 0 :(得分:0)

所以,我花了大约一天的时间来发现问题。所以一步一步: 我在msmq wcf上有微软样本 我发现没有区别 3.我明白,我有大消息(更大的1Mb),所以默认情况下WCF可以,而不是反序列化这么大的消息。设置 maxBufferPoolSize maxReceivedMessageSize

是必要的

但这就是问题 - 为什么wcf客户端在没有任何扩展配置的情况下成功发送如此大的消息:)

我的建议:在WCF中将包大小和池设置为最大可能(如果只使用该服务)。