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事件。这就是我所能说的。
任何帮助?
答案 0 :(得分:0)
所以,我花了大约一天的时间来发现问题。所以一步一步: 我在msmq wcf上有微软样本 我发现没有区别 3.我明白,我有大消息(更大的1Mb),所以默认情况下WCF可以,而不是反序列化这么大的消息。设置 maxBufferPoolSize 和 maxReceivedMessageSize
是必要的但这就是问题 - 为什么wcf客户端在没有任何扩展配置的情况下成功发送如此大的消息:)
我的建议:在WCF中将包大小和池设置为最大可能(如果只使用该服务)。