【问题标题】:Poison message when reading queue of known type读取已知类型队列时的中毒消息
【发布时间】:2012-06-08 01:12:20
【问题描述】:

我能够让它适用于不同的项目,并相信我遵循相同的路径/模式,但缺少一些东西。 当我在 MSMQ 上发送已知类型的消息时,我不断收到有害消息。

我有一个名为 ConcreteClass 的类,它有几个属性,用 DataMember 属性装饰。我有一个 ConcreteClass 派生自的“基础”类。 我可以很好地将消息发送到 MSMQ,但是当使用 WCF 从 MSMQ 读取时,服务总是出错并查看日志,这是一条有毒消息。

WCF 服务使用基类作为签名(在不同的项目中工作正常),并为服务应该期望的具体类装饰了 serviceknowntype 属性。

[ServiceKnownType(typeof(ConcreteClass))]
public sealed class WCFServiceMSMQReader : IWCFServiceMSMQReader { 
   [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
   public void ProcessIncomingMessage(MsmqMessage<BaseClass> msg) { .... do stuff .... }
}

界面:

[ServiceContract]
public interface IWCFServiceMSMQReader {
   [OperationContract(IsOneWay = true, Action = "*")]
   void ProcessIncomingMessage(MsmqMessage<BaseClass> msg);
}

基类:

[DataContract]
[KnownType(typeof(ConcreteClass))]
public class BaseClass
{
   ... some properties here...
}

具体类:

[DataContract]
public class ConcreteClass : BaseClass {

public ConcreteClass() : base() { ... stuff ... }
public ConcreteClass(params here) : base() { .... }

}

任何想法我哪里出错了?

【问题讨论】:

    标签: wcf msmq


    【解决方案1】:

    服务已知类型应在接口中声明

    【讨论】:

    • 这是解决您问题的方法吗?那么请不要忘记将其标记为正确答案,即使它来自您自己。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2014-10-28
    • 2017-11-11
    • 2017-09-09
    • 1970-01-01
    • 2020-03-01
    相关资源
    最近更新 更多