8

SOAP Web サービスを使用しています。Web サービスは、顧客ごとに個別のサービス URL を指定します。なぜ彼らがそうするのかわからない。それらの機能とパラメーターはすべて技術的に同じです。しかし、サービス用のプログラムを書きたい場合は、各企業が意図したものかどうかを知る必要があります。つまり、「apple」という会社の場合、次の using ステートメントを使用する必要があります。

using DMDelivery.apple;

もう一方は「オレンジ」と呼ばれる

using DMDelivery.orange;

しかし、私は自分のプログラムがそれらすべてに対して機能し、会社の名前またはサービスの基準点をパラメーターとして持つようにしたいと考えています。

更新: 顧客ごとに個別のアプリケーションを作成する必要がある場合、小さな変更ごとにすべてのアプリケーションを相互に更新し続ける必要があり、顧客の数が増えるにつれて、それは非常に非効率的な仕事になります。

誰でも解決策を考えることができますか?感謝します。

4

3 に答える 3

3

すべてのサービスの基本コントラクト (インターフェイス) がある場合、一種のファクトリを使用して具体的なサービスをインスタンス化し、クライアント コード (呼び出しコード) でインターフェイスへの参照のみを持つことができます。

//service interface
public interface IFruitService{
  void SomeOperation();
}

//apple service
public class AppleService : IFruitService{
  public void SomeOperation(){
    //implementation
  }
}

usingたとえば、一種のファクトリ クラスがあります (ここにステートメントを入れることができます)。

public static class ServiceFactory{
  public static IFruitService CreateService(string kind){
    if(kind == "apple")
      return new AppleService();
    else if(kind == "orange")
      return new OrangeService();
    else
      return null;
  }
}

using呼び出しコードで (インターフェイスを含む名前空間のステートメントを追加するだけです):

string fruitKind = //get it from configuration
IFruitService service = ServiceFactory.CreateService( fruitKind );
service.SomeOperation();

依存性注入の原則を使用することもできます。

于 2013-05-06T10:02:31.333 に答える
0

すべてが同じで、エンドポイント アドレスだけが異なる場合は、Web サービス メソッドを呼び出す前に、それだけを変更してみてください。

MyWebServiceObject ws= new MyWebServiceObject();
ws.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://www.blah.com/apple.asmx");
于 2013-05-06T07:57:48.707 に答える