1

次のシナリオがあります。

私の環境はVisualStudio2010、Framework4.0です。

特定の(かなり複雑な)オブジェクトを含む制御できないdllがあります。wcfサービスでそのオブジェクトを呼び出してから、それをクライアントアプリケーションに渡す必要があるため、クライアントアプリケーションは引き続きそのオブジェクトを処理します。

wcfでデータコントラクトを作成します。次のようになります。

  [DataContract]
    public class Test
    {       
        [DataMember]
        public dllCustomObjectType MyTest;
    }

次に、このデータコントラクトのインターフェイスを作成します。

 interface ITest
    {    
        [OperationContract]
        dllCustomObjectType GetMyTest(int Id);
    }

次に、インターフェイスを実装し、クライアントアプリケーションで実装されたメソッドを使用します。

クライアントアプリケーションには、私が制御していない同じdllへの参照があります。

実行しようとすると(実際、サービス参照を更新しても)、要求が失敗し、メタデータに解決できない参照が含まれているというエラーが表示されます。

データコントラクトでそのオブジェクトを複製することはできますが(これは大変な作業です)、オブジェクトを再作成せずにそのオブジェクトタイプの値をクライアントアプリケーションに渡す方法があるかどうか疑問に思っています。

何か助けていただければ幸いです。

ありがとう!

4

2 に答える 2

2

これが機能するためには、WCFは「dllCustomObjectType」をXMLとの間で変換する方法を知っている必要があります。つまり、「dllCustomObjectType」タイプは、シリアル化を念頭に置いて設計され、DataContractSerializerによって認識されるタイプである必要があります(http://msdn.microsoft.com/en-us/library/ms731923.aspxを参照)。サードパーティのDLLの作成者がシリアル化をサポートするようにそのタイプを設計したことがない場合は、基本的に、独自のシリアル化/逆シリアル化コードを作成する必要があります。これを行うには、タイプを独自のカスタムタイプ(最も単純)に変換するか、データコントラクトサロゲート(http://msdn.microsoft.com/en-us/library/ms733064.aspx )を作成します。)。別のオプションは、カスタムタイプ(上記の例では「Test」など)に動的シリアル化インターフェイス(IXmlSerializableまたはISerializableなど)を実装させ、含まれている「dllCustomObjectType」を手動でシリアル化してから、サービスでdllCustomObjectTypeの代わりにTestを使用することです。契約する。

于 2012-10-13T08:44:07.077 に答える
0

データコントラクトに名前空間を追加してみてください

[DataContract(Namespace="namespace.sample.com")]
于 2012-10-12T22:13:34.500 に答える