Visual Studioの「サービス参照の追加」機能を使うと、WCFサービスのプロキシクラスを自動で生成してくれます。このプロキシクラスはPartialクラスなので、拡張することができます。
検証環境
Visual Studio 2008 SP1、.NET Framework 3.5 SP1
WCFサービスプロジェクト
プロジェクトテンプレートは、[Web] - [WCFサービスアプリケーション]を選択します。
IService.cs
using System.Runtime.Serialization; using System.ServiceModel; namespace WebService { [ServiceContract] public interface IService { [OperationContract] Hoge GetData(); } [DataContract] public class Hoge { [DataMember] public string Foo { get; set; } [DataMember] public string Bar { get; set; } } }
Service.svc.cs
namespace WebService { public class Service : IService { #region IService メンバ public Hoge GetData() { return new Hoge() { Foo = "foo", Bar = "bar" }; } #endregion } }
コンソールアプリケーションプロジェクト
コンソールアプリケーションプロジェクトを追加します。
サービス参照の追加
作成したWCFサービスのサービス参照を追加します。手順はリンク先を参考にしてください。
WCFのセッション機能でステートフルなWebサービスを作成する - プログラマーな日々
Webサービスは通常ステートレスですが、WCFのセッション機能を使うとステートフルなWebサービスを作成することができます。
Program.cs
using System; using WebServiceClient.ServiceReference; namespace WebServiceClient { class Program { static void Main(string[] args) { ServiceClient proxy = new ServiceClient(); Hoge hoge = proxy.GetData(); Console.WriteLine(hoge); Console.ReadKey(); } } }
プロキシクラスの拡張
WCFサービス側でHogeクラスにメソッドを実装しても、クライアント側に生成されたHogeクラスには反映されません。そこでPartialクラスであることを利用してクライアント側のHogeクラスを拡張し、プロパティとメソッドを追加してみます。
ServiceAdditional.cs
コンソールアプリケーションプロジェクトにServiceAdditional.csを追加します。
namespace WebServiceClient.ServiceReference { public partial class Hoge { // プロパティの追加 public string Baz { get { return "baz"; } } // メソッドの追加 public override string ToString() { return string.Format("Foo = {0}, Bar = {1}, Baz = {2}", Foo, Bar, Baz); } } }