2

私は 3 つの Web サービスを持っています。これらは 3 つの異なるベンダーによって開発され、異なる URL を持っています。入力パラメータと出力パラメータ。これらはすべて ASMX Web サービスです。これらは、サードパーティのリレーショナル データベースからレコードを削除するために使用されます。たとえば、personID を指定すると、あるシステムから人が削除され、その人にすべてがリンクされます。別のシステムでは、注文 ID を指定すると、注文に関連付けられたすべてが削除されます。

いくつかのオプションがあります:

  1. Web サービスへのアクセスを担当する単一のラッパー クラスを作成します。共通の入力パラメータを提供し、共通の出力パラメータを受け入れます。このクラスには多くの責任があります。
  2. 3 つのラッパー クラス (Web サービスごとに 1 つ) を作成します。
  3. Visual Studio によって生成されたプロキシを変更する

どの方法が最適ですか?

4

1 に答える 1

1

Visual Studio が適切なプロキシ クラスを自動的に生成できるようにすることをお勧めします。次に、すべてのラッパー クラスが同じインターフェイスを実装できるように、Web サービスごとにラッパー クラスを実装します。たとえば、次のような共通インターフェイスを作成できます。

Public Interface IPersonBusiness
    Sub DeletePerson(personId As String)
End Interface

次に、2 つの Web サービスがあるとします。1 つ目は と呼びますがWebService1Delete個人 ID に続いて削除時間を受け取るメソッドがあります。2 番目の Web サービス ( と呼びますWebService2) には、DeletePeople個人 ID の配列を受け取るメソッドがあります。次のように、上記の共通インターフェースを使用して、これらの両方の Web サービスをラップできます。

Public Class WebService1Wrapper
    Implements IPersonBusiness

    Public Sub New(proxy As WebService1)
        _proxy = proxy
    End Sub

    Private _proxy As WebService1

    Public Sub DeletePerson(personId As String) Implements IPersonBusiness.DeletePerson
        _proxy.Delete(personId, Date.Now)
    End Sub
End Class

Public Class WebService2Wrapper
    Implements IPersonBusiness

    Public Sub New(proxy As WebService2)
        _proxy = proxy
    End Sub

    Private _proxy As WebService2

    Public Sub DeletePerson(personId As String) Implements IPersonBusiness.DeletePerson
        _proxy.DeletePeople({personId})
    End Sub
End Classs

本当に必要でない限り、独自のプロキシ コードを作成することは避けます。たとえば、メソッド名や渡すパラメータなどを伝える外部設定に基づいて Web サービスを動的に呼び出す必要がある場合は、検討する価値があります。

また、任意の Web サービスを呼び出すためのすべてのロジックを単一のラッパー クラスに入れることも避けます。これを行うと、特に将来 Web サービスを追加する必要がある場合に、コードが不必要に見苦しく、混乱を招くことになります。

于 2013-09-30T19:56:04.210 に答える