我正在编写一个位于客户端和目标之间的中间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
答案 0 :(得分:0)
使用以下信息:"Type not expected", using DataContractSerializer - but it's just a simple class, no funny stuff?
您是否尝试使用[KnownType(typeof(InputDoc)]装饰包含InputDoc类的类?
我会阅读上面引用的SO问题,希望这对您的项目结构有意义。我不熟悉你的项目结构,所以我很难向你详细说明你应该把它放在哪里[KnownTYpe(typeof())]