2011-07-04 12 views
0

オブジェクトの配列を単一のパラメータとして受け取る操作を持つWCFサービスのプロトタイプを作成しました。問題は、各オブジェクトが基本クラス(Messageと呼ばれます)から継承され、その順序がわからないことです。最初は、WCFが受け取る(誤って)のは、メッセージから派生した正しいタイプではなく、メッセージエレメントの配列です。DelphiクライアントからWCFを使用する(配列と継承)

少し努力して、Delphi 6.02からこのサービスを呼び出すことができました。私はWSDLインポーターを使って基本クライアントを作成し、ソースを手作業で編集してDelphi SOAP解釈のいくつかの非互換性を修正しました。基本的に、私はこのように、OnBeforeExecuteイベントでいくつかの調整を行います。

SOAPRequest := StringReplace(SOAPRequest, '<item ', '<Message ', [rfReplaceAll]); 

上記のコードは、Delphiは、配列要素を渡す方法を修正します。私はここでそれを学んだArray_Of_Int in SOAP client。その後、各オブジェクトは、メッセージとしてエンコードされますが、その実行時の型に属性ポイントさ

<Message xsi:type="Authenticate"> <!-- I need to get this, exactly, types can vary --> 

問題があるが、ここで行く、私は配列の他の種類を持っています。次に、「アイテム」の出現を「添付ファイル」または「住所」に置き換えることができます。クラスをioDocumentとしてマークすると、基本クラスがtag-nameとして取得されますが、属性を介して正しいタイプが失われます。

これを処理する方法はありますか?おそらく私が使用できる他のSOAPライブラリですか?または、.NETは「アイテム」エンコーディングを理解できますか?

ありがとうございます。

+0

ます。http://

{OPToSOAPDomConv.pas, around line 3001} procedure TSOAPDomConv.SetNodeType(RootNode, InstNode: IXMLNode; const ElemURI, TypeName: InvString); var Pre, AttNodePre: InvString; begin if not (soSendUntyped in Options) /*and not (soDocument in Options)*/ then ... 

この方法で、オブジェクトは実際の型をエクスポートするguarantedしますさstackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/#answer-1732454 –

答えて

0

私はそれを動作させるために管理しますが、このようなDelphiのソースを変更する必要がありました:

<Message xsi:type="Authenticate"> <!-- I need to get this, exactly, types can vary --> 
関連する問題