9

WCF ServiceContract インターフェイスの .NET 名前空間を変更しながら、古い (名前空間を除いて同一の) ServiceContract を使用しているクライアントとの WCF サービスの下位互換性を維持する方法はありますか? たとえば、(vb.net に) 次があるとします。

Namespace MyCompany.MyPoorlyNamedProject
    <ServiceContract(Name:="ThingService")> _
    <CLSCompliant(True)> _
    Public Interface IThingService
        ...
    End Interface
EndNamespace

そして、私はそれを

Namespace MyCompany.MyProject
    <ServiceContract(Name:="ThingService")> _
    <CLSCompliant(True)> _
    Public Interface IThingService
        ...
    End Interface
End Namespace

サービスをまったく変更せずに。

そのままやってみたのですが、wsdl から参照した xsds に新しいネームスペース名が表示されており、互換性がないようです。

何か案は?

4

1 に答える 1

13

サービス コントラクトの名前と (XML) 名前空間が変わらない限り - もちろんです! WCF サービスは、実装方法の .NET 内部についてはまったく気にしません。

Add Service Referenceこれは、クライアント側が標準的な方法 (サービスのメタデータに問い合わせて別のクライアント側プロキシを作成する)を使用してサービスに接続している限り機能します。その場合、クライアント側プロキシはサービス側の .NETを認識しません。名前空間... サービス側で名前空間を変更して、サービス ファイルを再デプロイできます。クライアントは引き続き動作します。

調整を行う必要がある唯一の場所は、サービス側の構成です ( web.configIIS でホストしている場合はホスト側app.configで)。

  • <service>タグの属性name=に、サービス クラスの完全修飾 .NET 型名 (.NET 名前空間を含む) が含まれている

  • <endpoint>タグの属性contract=に、サービス コントラクトの完全修飾 .NET 型名 (.NET 名前空間を含む) が含まれている

共通アセンブリをサービス コントラクトと共有する場合、これは明らかに機能しません。その場合、クライアント側は共通アセンブリ内のそれらのコントラクト ファイルの .NET 名前空間に関連付けられ、それらが変更された場合、クライアントが勝ちます。もう働かない..

于 2011-01-27T14:49:06.740 に答える