SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Windows Azure新機能チュートリアル

Windows Azure AppFabricサービスバスでオンプレミス連携

Windows Azure 新機能チュートリアル(9)

クライアントプログラム

 サービスプログラムの動作が確認できたところ、クライアントプログラムの解説をしていきます。リスト6がクライアントプログラムです(サンプル説明のため例外処理は省略しています)。

[リスト6]:クライアントプログラム(OnPremise/Program.cs)
// サービス向けURIの生成
Uri address = ServiceBusEnvironment.CreateServiceUri(schema,                          *1 
                                                     serviceNamespace,
                                                     servicePath);

var channelFactory = new ChannelFactory<IEchoChannel>("ServiceBusEndpoint",           *2
                                                      new EndpointAddress(address));
// チャネルの作成
IEchoChannel channel = channelFactory.CreateChannel();                                *3

    // チャネルのオープン
channel.Open();
Console.WriteLine("テキストを入力してください([Enter]で終了) : ");
string input = Console.ReadLine();
while (input != String.Empty)
{
    Console.WriteLine("返却値 : {0}", channel.Echo(input));                           *4
    Console.WriteLine("エラー " + e.Message);
    input = Console.ReadLine();
}

channel.Close();
channelFactory.Close();

 *1は、サービス提供側と同じく、AppFabricサービスバスのアドレスを生成しています。*2は、サービスバスのアドレスを指定し、チャネルファクトリーを生成します。さらに、*3でチャネルを生成し、オープンをします。これにより、サービスを利用する準備が整います。

 *4は、チャネルを元に、サービス側のEcho操作を呼び出し、結果をコンソールに表示します。

 リスト7が、クライアントプログラム側のアプリケーション構成ファイルです。

[リスト7]:サービスプログラム(OnPremiseClient/App.config)
<?xml version="1.0"?>
<configuration>
    <appSettings>
      <add key="schema" value="sb"/>
      <add key="namespace" value="sb-sample"/>
      <add key="path" value="sample"/>
    </appSettings>
    <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <system.serviceModel>
    <extensions>
       <!--  サービスバスの構成設定  -->                                      *1
    </extensions>
    <!-- クライアントエンドポイントの定義 -->
    <client>
      <endpoint name="ServiceBusEndpoint"                                     *2
                contract="OnPremiseService.IEchoService"
                binding="netTcpRelayBinding"
                behaviorConfiguration="EndpointBehavior"/>
    </client>
     
      <behaviors>                                                             *3
        <endpointBehaviors> 
          <behavior name="EndpointBehavior">
            <transportClientEndpointBehavior credentialType="SharedSecret">
              <clientCredentials>
                <sharedSecret issuerName="owner"
                                issuerSecret="<<既定のキー>>"/>
              </clientCredentials>
            </transportClientEndpointBehavior>
          </behavior>
        </endpointBehaviors>
      </behaviors>
    </system.serviceModel>
</configuration>

 *1は、サービスプログラムと同様にサービスバスの構成設定を追加します。

 *2は、client要素で、クライアントのエンドポイント定義です。サービス側と同じく、コントラクト、バインディングを指定します。

 *3は、behavior要素で、エンドポイントのビヘイビアを定義します。サービス側と同じく、サービスを利用するための認証情報を指定します。

 クライアント側のプログラム方法についても、WCFと変わるところはありません。これで、サービスとクライアントの準備が整いました。

実行

 サービス提供側とクライアント側を実行してみましょう。クライアント側で入力したメッセージがサービス側に表示された後に、クライアント側でも表示されればAppFabricサービスバスを介してメッセージ中継が成功しています(図8)。

図8:実行例
図8:実行例

Webロールからの利用

 前節では、お互いをオンプレミスに見立てたコンソールプログラムから接続を確認しましたが、ここでは、オンプレミスから登録したサービスにWebロールから接続してみます。基本的にクライアントから接続する場合と変わりはありませんが、いくつはWindows Azure固有の準備を実施しておく必要があります。以下にポイントとなる手順を解説します。

アセンブリの準備

 Windows AzureゲストOSには、Microsoft.ServiceBusアセンブリはインストールされていません。[参照設定]-[Microsoft.ServiceBus]を選択し、プロパティから、ローカルコピーを「True」に設定してください(図9)。一般的に、利用者が用意したアセンブリはローカルコピーを「True」にして配置する必要があります。

図9:ローカルコピーの設定
図9:ローカルコピーの設定

ゲストOSの構成変更

 SDK 1.5を利用している場合には、クライアントプログラムと同じく、Web.configファイルにサービスバスの構成設定が必要です。

 また、SDK 1.0を利用している場合には、マシン構成ファイルへの設定が必要であるため、スタートアップタスクでRelayConfigurationInstaller.exeを構成する必要があります。

 ただし、Web.configを使わずに、すべてコードでクライアントをプログラミングするような場合は、この構成変更を実施する必要はありません。

実行

 それでは、Windows Azureにデプロイして実行してみましょう。メッセージにテキストを入力して[送信]ボタンを押してください。サービス側にメッセージが表示されたのち、ブラウザにも返信メッセージが表示されれば、正しく動作しています(図10)。

図10:Webロールからの実行例
図10:Webロールからの実行例

まとめ

 少しでもAppFabricサービスバスの感触をつかめたでしょうか。WCFをベースとしているため、WCF未経験者にとっては少々取っ付きにくいかもしれません。

 ここで紹介した接続方法は、ほんの一例に過ぎません。WCFを含む、強力な.NET Framework基盤とAppFabricサービスバスを組み合わせることによって、オンプレミスとクラウド間のシステム連携の可能性が広がるでしょう。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Windows Azure新機能チュートリアル連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト statemachine(statemachine)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6225 2011/10/26 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー