9

インターフェイスに具体的な実装を使用すると正常に機能する単純なwcfサービスコントラクトがありますが、具体的なクラスの代わりにパラメーターでインターフェイスを使用する場合は、以下に表示するエラーが発生します。

コードは次のとおりです。

[ServiceContract]
public interface IClientUserRegistration
{
    [OperationContract]
    void RegisterClientUser(ClientUser clientUser);

    [OperationContract]
    List<ClientUser> GetUsers();
}

ClientUserをIClientUserに置き換えると、WCFテストクライアントは、System.Object型を使用しているため、RegisterClientUser操作はサポートされていないと表示します。GetUsersの戻り値をListに置き換えると、System.Object []型を使用しているため、この操作はサポートされていないと表示されます。なぜこれらのエラーが発生するのですか?

IClientUserを使用しようとした理由は、IClientUserインターフェイスを実装するさまざまなユーザータイプを実装してRegisterClientに渡すことができるためですが、ClientUserのみを渡すことができる場合は、RegisterClientオーバーライドの束を作成する必要があります。さまざまなタイプのユーザー。

4

2 に答える 2

13

SOAPにはインターフェースの概念がありません。それは逆シリアル化を困難にする傾向があります。

于 2010-09-15T18:15:24.990 に答える
12

これは、クライアントとサーバー間を通過するためにオブジェクトをシリアル化する必要があるためです。「オブジェクト」型を渡すことは許可されていません。すべてのタイプは、適切にシリアル化および逆シリアル化できるように、具体的である必要があります。インターフェイスは、インターフェイスのサブタイプを持つ「オブジェクト」タイプにすぎません。オブジェクト全体をこの方法で逆シリアル化およびシリアル化することはできません。インターフェースメンバーのみを逆シリアル化できます。これは、両側で本当に厄介な実装になります。

于 2010-09-15T18:18:40.897 に答える