【问题标题】:WCF binding, contracts, knowntypesWCF 绑定、契约、已知类型
【发布时间】:2012-09-27 00:59:43
【问题描述】:

我以前可以通过原型项目做到这一点,但是因为现在它正在与项目中包含的其他东西一起“实施”,所以在 WCF 能够接收消息方面我遇到了一些问题来自 MSMQ。

解决方案的结构是我们有“团队”。每个项目都代表了这一点(在某种程度上)。 团队只能访问他们需要的项目。

所以:

IncomingMessaging 项目(参考“消息”项目)

这包含的类是从其自身类型的基类派生的具体类(在“消息”项目中)。基类都在“消息”项目中。示例:

FirstReport -> FirstReportBase
SecondReport -> SecondReportBase
ThirdReport -> ThirdReportBase

每个基类都派生自“MainBase”。这也存在于“消息”项目中。 MainBase 已使用 KnownTypes 属性进行修饰,并具有所有基本已知类型。 (FirstReportBase、SecondReportBase 等...)

然后我有一个 WCFImplementation.Messages 项目,它引用“消息”和“传入消息”项目。 WCFImplementation.Messages 项目有一个具体的类,用于将 WCF 绑定到 MSMQ,实际实现如下:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
public class InboundMessagingService : IInboundMessagingService
{
   [OperationBehavior(TransactionScopeRequired = true)]
   public void ProcessIncomingMessage(MsmqMessage<MainBase> msg) { ... }
}

IInboundMessagingService 具有 ServiceContract 属性,并且还具有所有基本类型的 ServiceKnownType 属性

到目前为止和我在一起?

然后我有一个简单的控制台应用程序项目来托管服务。注意此时我已经向队列发送了一条 FirstReport 消息:

FirstReport fr = new FirstReport(....);

控制台应用程序正在运行,但服务出现故障。它无法读取队列中的消息! (毒药信息)

我错过了什么? IInboundMessagingService 的接口是否必须用具体的类进行装饰?我不能只使用基类吗?

我之前让它与原型一起工作,因为我在接口中将具体 (FirstReport) 和基类 (FirstReportBase) 装饰为服务已知类型,但这是一个“松散”类型的项目结构

【问题讨论】:

    标签: wcf msmq


    【解决方案1】:

    问题似乎是对象和子对象等...都需要用 DataContract 属性进行标记。 那么主要的具体/基类应该具有用已知类型修饰的 knowntypes 属性,这些已知类型是该基类的子类。

    【讨论】:

      猜你喜欢
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多