WCF中继服务数据对象的问题

时间:2015-09-16 15:16:02

标签: .net vb.net web-services wcf soap

我正在编写一个位于客户端和目标之间的中间WCF SOAP服务。目标端点被分成两个具有相同操作签名的服务,中继服务的工作是识别需要将哪些客户端数据发送到哪个,然后发送它。

因此,我尝试在中继 wcf服务中重复使用目标界面,以便客户端可以连接我的接力没有变化。在测试中,我在尝试调用目标调用时收到以下错误:

  

尝试序列化参数时出错   processDoc。 InnerException消息   是' Type' InputDoc'与数据合同名称   ' InputDoc:http://schemas.datacontract.org/2004/07/RelayService'是   没想到。考虑使用DataContractResolver或添加任何类型   静态地知道已知类型的列表 - 例如,by   使用KnownTypeAttribute属性或将它们添加到列表中   传递给DataContractSerializer的已知类型。'。请参阅   InnerException以获取更多详细信息。

我怀疑问题在于我写了一个糟糕的界面。我的接口包含InputDoc类的数据协定,它继承自目标服务的InputDoc类。有人可以解释一下我怎么能成功地将这个对象传递给目标服务吗?

我的界面:

<ServiceContract()>
Public Interface IRelayService

    <OperationContract()>
    Function processDoc(ByVal inputDoc As InputDoc) As ResultResposne
End Interface


<DataContract(), _
 System.Xml.Serialization.XmlTypeAttribute([TypeName]:="InputDocument", [Namespace]:="http://test.net/")>
Partial Public Class InputDoc
    Inherits TargetService.InputDoc
End Class

1 个答案:

答案 0 :(得分:0)

使用以下信息:"Type not expected", using DataContractSerializer - but it's just a simple class, no funny stuff?

您是否尝试使用[KnownType(typeof(InputDoc)]装饰包含InputDoc类的类?

我会阅读上面引用的SO问题,希望这对您的项目结构有意义。我不熟悉你的项目结构,所以我很难向你详细说明你应该把它放在哪里[KnownTYpe(typeof())]