WCF サービスに渡そうとしているカスタム DTO のリストがあります。
次のエラーが表示されます。
パラメータ tcp://localhost/:oObject をシリアライズしようとしてエラーが発生しました。InnerException メッセージは、「Type 'System.Collections.Generic.List`1[[TEGE.ER.WorkFlowEngine.WFCommon.HeartBeat.HeartBeatDTO, WFCommon, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]」で、データが含まれていましたコントラクト名 'ArrayOfHeartBeatDTO:TEGE.ER.WorkFlowEngine.WFCommon.HeartBeat' は想定されていません。たとえば、KnownTypeAttribute 属性を使用するか、DataContractSerializer に渡される既知の型のリストにそれらを追加することにより、静的に認識されていない型を既知の型のリストに追加します。詳細については、InnerException を参照してください。
DTO DataContract と DataMember が設定されています。自動 WCF サービス参照を行い、コレクションを配列ではなく汎用リストに変更するための高度なオプションを確実に実行しました。
私は何が欠けていますか?同様のことを行う多くのサイトを通過しましたが、このエラーを超えて動作させることはできません。何か案は?
送信者からのコード:
<DataContract(Name:="HeartBeatDTO", Namespace:="TEGE.ER.WorkFlowEngine.WFCommon.HeartBeat")> _
Public Class HeartBeatDTO
Public Sub IssuePatientReport()
SBClient.SendCommunication(_PatientID, _HeartBeats)
End Sub
受信側のコード:
Public Sub SendCommunication(ByVal sKey As String, ByVal oObject As Object) Implements iOperatorCommunication.SendCommunication
If _CurrentCommunicationLog.ContainsKey(sKey) Then
_CurrentCommunicationLog.Item(sKey) = oObject
Else
_CurrentCommunicationLog.Add(sKey, oObject)
End If
End Sub
私のインターフェース:
<ServiceContract(Namespace:="tcp://localhost/")> _
<ServiceKnownType(GetType(List(Of HeartBeatDTO)))> _
Public Interface iOperatorCommunication
<OperationContract()> _
Function ReceiveCommunication(ByVal sKey As String) As Object
<OperationContract()> _
Function ReturnCommunicationLevel() As Integer
<OperationContract()> _
Function ReturnCommunications() As Dictionary(Of String, Object)
<OperationContract()> _
Function ReturnCommunicationsByKeySearch(ByVal sSearch As String) As Dictionary(Of String, Object)
<OperationContract()> _
Sub SendCommunication(ByVal sKey As String, ByVal oObject As Object)
End Interface
更新: 新しいエラー メッセージは次のとおりです。
パラメータ tcp://localhost/:oObject をシリアライズしようとしてエラーが発生しました。InnerException メッセージは、「Type 'TEGE.ER.WorkFlowEngine.WFCommon.HeartBeat.HeartBeatDTOList」で、データ コントラクト名は「HeartBeatDTOList:TEGE.ER.WorkFlowEngine.WFCommon.HeartBeat」ではありません。たとえば、KnownTypeAttribute 属性を使用するか、DataContractSerializer に渡される既知の型のリストにそれらを追加することにより、静的に認識されていない型を既知の型のリストに追加します。詳細については、InnerException を参照してください。