Web サービスと、それを使用する複数のクライアントがあります。MVC 2.0 Web サイト、winforms アプリ、および場合によってはモバイル アプリ。
モバイル アプリの場合、各アプリケーションが内部で Web サービス接続にアクセスして管理する必要があることを理解しています。しかし、.net アプリケーションについてはどうすればよいでしょうか? リクエスト オブジェクトと戻り値の型に複合型を使用しています。これがサンプルです。
私が最初に考えたのは、Web サービスを参照し、単なるラッパーになるラッパー クラスを用意することでした。次に、各プロジェクトでラッパー クラスを呼び出すだけで、接続と資格情報を Web 構成で構成するだけで済みます。
これは私の抽象的な要求です。各リクエストに必要なすべての共有プロパティがあります。
[DataContract]
public abstract class RequestBase : IRequest
{
#region IRequest Members
[DataMember]
public string ApiKey { get; set; }
[DataMember]
public string ApiPassword { get; set; }
[DataMember]
public int PageSize { get; set; }
[DataMember]
public int PageIndex { get; set; }
#endregion
public RequestBase() : this(String.Empty, String.Empty) { }
public RequestBase(string apiKey, string apiPassword)
{
ApiKey = apiKey;
ApiPassword = apiPassword;
}
}
次に、基本クラスから継承するクラスを次に示します。
[DataContract]
public class CustomerRequest : RequestBase
{
[DataMember]
public int Id { get; set; }
}
そして、これが私の Response オブジェクトです。結果セットのタイプを除いて、各応答は同じであるため、ジェネリックを使用します。
[Serializable]
public class Response<T>
{
public IEnumerable<T> Results { get; set; }
public int TotalResults { get; set; }
public int PageIndex { get; set; }
public int PageSize { get; set; }
public RulesException Exception { get; set; }
}
問題は、Web 参照を作成したときに、サービスによって受け入れられた/返された型がプロキシ オブジェクトに変換されたことです。
サービス参照 (Web 参照ではなく) を使用した場合、サービス参照が公開された場合を除いて、うまく機能しているように見えましたが、これは理想的とは言えません。
コードの重複を減らすアイデアを探しています。