1

3 つの .NET Web サービス クライアントで使用される WCF アプリケーションを開発しました。ここまでは順調ですね。

しかし、別のスキーマが別のクライアントに発行されるように、WCF アプリケーションを変更する必要があります。

例えば:

class A : IMyServices
{
    public string GetName() {}

    public Order GetOrderInfo(string orderId) {}

    public Payment GetPaymentDetails(Order order) {}
}

クライアントの 1 人には見えないようGetPaymentDetailsにする必要があります (基本的に、この GetPaymentDetails および Payment クラス スキーマを、そのクライアントによって作成されている WSDL から非表示にする必要があります)。他のクライアントには、他の方法に対する制限があります。

一部のシナリオでは、オペレーションPaymentにアクセスできる場合でも、クラスのプロパティの一部をクライアントに公開しないでください。GetPaymentDetails

クライアントごとに異なるスキーマを公開する方法はありますか?

留意すべき点として、私のサービスは WCF を使用して開発されており、私のサービスを使用するクライアントは従来の .NET Web サービスを使用しています。

4

1 に答える 1

1

インターフェイスを分割し、さまざまなコントラクト用にさまざまなエンドポイント (セキュリティが異なる可能性があります) を公開するのはどうですか? 次の行に沿ってコントラクトと実装を設計できます。

[ServiceContract]
public interface ICompleteService : IBasicService, IPaymentService
{ }

[ServiceContract]
public interface IBasicService
{
    string GetName();
    Order GetOrderInfo(string orderId);
}

[ServiceContract]
public interface IPaymentService
{
    Payment GetPaymentDetails(Order order);
}

class A : ICompleteService
{
    public string GetName() { }
    public Order GetOrderInfo(string orderId) { }

    public Payment GetPaymentDetails(Order order) { }
}

次に、好きなようにエンドポイントを公開できます。たとえば、次のようになります。

  • 最小限のセキュリティを備えた IBasicService エンドポイント
  • 最大限のセキュリティを備えた ICompleteService エンドポイント

Payment DataContracts についても同様の行をたどることができます。コントラクトは、さまざまなエンドポイントがさまざまな操作とデータにアクセスできるようにする責任がありますが、内部では実装を共有し、これを機能させるために必要な作業量を最小限に抑えます。

于 2012-11-04T10:46:56.897 に答える