クライアントからサービスの一方向メソッドを呼び出す(もう少し正確に表現すれば、クライアントから一方向操作に設定されているサービスエンドポイントにメッセージを送信する)、サービスの操作が完了しなくても呼び出し元に制御が戻ります。
検証してみましょう。
サービス
これまでのエントリと同じ要領でサービスを作成します。クラスライブラリで実装し、IISにホストします。
using System.ServiceModel; using System.Threading; namespace HelloWorld { [ServiceContract] public interface IStockService { [OperationContract(IsOneWay = true)] // 一方向 void DoBigAnalysisFast(string ticker); [OperationContract] void DoBigAnalysisSlow(string ticker); } public class StockService : IStockService { public void DoBigAnalysisFast(string ticker) { Thread.Sleep(10000); } public void DoBigAnalysisSlow(string ticker) { Thread.Sleep(10000); } } }
クライアント
これまでのエントりと同じ要領でサービスを参照し、プロキシクラスとapp.configを作成します。
using System; using HelloWorldClient.ServiceReference; namespace HelloWorldClient { class Client { static void Main(string[] args) { StockServiceClient proxy = new StockServiceClient(); { Console.WriteLine("1回目の呼び出し"); proxy.DoBigAnalysisFast("hoge"); Console.WriteLine("1回目の呼び出しからの制御戻り"); } { Console.WriteLine("2回目の呼び出し"); proxy.DoBigAnalysisSlow("hoge"); Console.WriteLine("2回目の呼び出しからの制御戻り"); } } } }