2012-06-02 35 views
1

我已经能够使用原型项目执行此操作,但因为现在它将与项目中包含的其他内容一起进入“实施”,所以我在WCF方面存在一些问题能够从MSMQ中接收消息。WCF绑定,合同,知识类型

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

所以:

IncomingMessaging项目(引用“消息”项目)

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

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

每个基类派生自“MainBase”。这也驻留在“消息”项目中。 MainBase已用KnownTypes属性装饰,并具有所有已知基类型。 (FirstReportBase,SecondReportBase等...)

然后我有一个WCFImplementation.Messages项目,其中引用“消息”和“IncomingMessaging”项目。 的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),但与原型工作之前,这是一个“松”型项目结构

回答

0

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