astel-labs.net

C#などのプログラミングTipsや雑記をつらつらと書くかもしれないブログです。

  • Home
RSS

WCF – ChannelFactory を利用したサービス呼び出し

Posted on 2013年7月29日 by Nymphaea
No CommentsLeave a comment

WCF を利用してサービスを公開する際に、公開したサービスにアクセスする方法としてサンプルでよく紹介される「サービス参照の追加」ですが、デバッグ環境と本番環境の切り替えによりエンドポイントアドレスが異なる場合には、サービスを発行するたびにエンドポイントアドレスを書き換えるなど手間がかかり使い勝手がよくないため、通常 ChannelFactory が利用されます。

29-1_01    29-1_06

今回は、ChannelFactory を利用して WCF サービスにアクセスする方法をご紹介します。

 

まずは、簡単なサンプルプロジェクトを作成します。

例として『ChannelFactorySample』という名前で「コンソールアプリケーション」を作成し、続いて同じソリューション内に「WCF サービスアプリケーション」をデフォルトの名前の『WcfService1』で追加します。
今回は、WCF サービスプロジェクトに対しては何も変更を行いません。

ソリューションの構成は以下のようになります。

29-1_02

 

プロジェクトを作成しましたら、ChannelFactorySample の参照設定に「WcfService1」プロジェクトを追加します。
この時、併せてフレームワークから「System.ServiceModel」も一緒に追加しておいてください。

29-1_03

 

プロジェクトの設定ができましたので、続いてコードを書いていきます。

「ChannelFactorySample」プロジェクトの「Program.cs」を開き、Main メソッド内に処理を以下のように記載します。

using System;
using System.ServiceModel;
using WcfService1;

namespace ChannelFactorySample
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // チャネルファクトリの作成
                var channel = new ChannelFactory<IService1>(
                    new BasicHttpBinding(),
                    new EndpointAddress("http://localhost:53461/Service1.svc"));
                if (channel == null)
                    throw new Exception("チャネルファクトリの作成に失敗。");

                // チャネルの取得
                var service = channel.CreateChannel();
                if (service == null)
                    throw new Exception("チャネルの作成に失敗。");

                // サービスの実行
                Console.WriteLine("ExecuteService=> " + service.GetData(5));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            // キーが押下されるまで待機する
            Console.ReadKey();
        }
    }
}

今回のサンプルでは、ChannelFactory の作成に BasicHttpBinding を使用しています。
また、EndpointAddress で指定しているアドレスは、「WcfService1」プロジェクトの「Service1.svc」を右クリックして「ブラウザーで表示」を選択して表示されたブラウザの、アドレスを指定します。

29-1_04    29-1_05

26行目で「IService1」で定義されている「GetData」メソッドを呼び出しています。

サービスとしてメソッドを呼び出すには、クラスに「ServiceContract」属性が付加されていること、またクラス内のメソッドに「OperationContract」属性が付加されていることが必須です。

[ServiceContract]
public interface IService1
{

    [OperationContract]
    string GetData(int value);
}

 

以上のように、サービス参照でサービスを呼び出すのと同じくらい、ChannelFactory を利用して簡単にサービスを呼び出せることがわかるかと思います。

Categories: C#, WCF, プログラミング

 

WCF – Silverlight からのサービス呼び出し
DebuggerVisualizer アドインの作成

コメントを残す

コメントを投稿するにはログインしてください。

  • 2013年7月
    日 月 火 水 木 金 土
     123456
    78910111213
    14151617181920
    21222324252627
    28293031  
    « 11月   5月 »
  • 最近の投稿

    • raspberry pi に nginx をセットアップする
    • VSCode を日本語化する
    • raspberry pi に VSCode をインストールする
    • WindowsのプロダクトIDを取得する
    • SQL Server – money型とdecimal型を併用した金額計算
  • アーカイブ

    • 2020年3月
    • 2016年12月
    • 2014年6月
    • 2014年5月
    • 2013年7月
    • 2012年11月
    • 2012年7月
    • 2012年5月
    • 2012年4月
    • 2011年4月
    • 2011年1月
    • 2010年11月
    • 2010年10月
    • 2010年9月
    • 2010年8月
    • 2010年7月
    • 2010年6月
    • 2010年5月
    • 2010年4月
  • カテゴリー

    • C#
    • jQuery
    • OpenCV
    • raspberry pi
    • SharePoint
    • Silverlight
    • SQL Server
    • WCF
    • WPF
    • プログラミング
    • 未分類
    • 雑記
© astel-labs.net. Proudly Powered by WordPress | Nest Theme by YChong

このブログ内で公開されているソースコードおよびサンプルプログラムに関わるライセンスはすべて修正BSDライセンス(New BSD License)として公開しています。
但し、サンプルプログラムに含まれる外部アセンブリが同様のライセンスとは限りませんので、利用する前に必ずすべてのライセンスの確認を行ってください。