今回も、「Windows Azure platform AppFabric」をやってみます。
前回はサービスを作ったので、今回はクライアントを作ります。
今回の内容も、ほぼ下記の本そのままです。
とても、良い本です。(いつもお世話になっております)
Windows Azureアプリケーション開発入門
前回は、Namespaceを「helloappfabric」で作ったのですが、当分使わないと思い、削除してしました。
今回、「helloappfabric」で作ろうとしたら、名前が重複して作れなかったので、
泣く泣く「helloappfabric2」にしました。

なので、「app.config」の「solutionnamespace」を「helloappfabric2」に変更しました。
1: <?xml version="1.0" encoding="utf-8" ?>
2:
3: <configuration>
4:
5: <appSettings>
6: <add key="solutionnamespace" value="helloappfabric2"/>
7: <add key="issuer" value="owner"/>
8: <add key="accountkey" value="????????????????????????????????????????????"/>
9: </appSettings>
10:
11: <system.serviceModel>
12: <services>
13: <service name="HelloAppFabricService.HelloAppFabric">
14: <endpoint binding="netTcpRelayBinding" contract="HelloAppFabricService.IHelloAppFabric"/>
15: </service>
16: </services>
17: </system.serviceModel>
18:
19: </configuration>
デバッグ実行して……
「Service Gatewey」を表示すると、居ました。

けど、「Namespace」を「helloappfabric2」に変更してしまったので、
「sb://helloappfabric2.servicebus.windows.net/helloappfabric/」になってしまいました。
「2」って……テンション下がるなぁ。
気を取り直して、クライアントを作ってみました。
「Web Role」を「良い本」と同じ名前で追加しました。

ソリューションの構成は、下の図です。

参照設定ですが、サービスと同じです。
「IHelloAppFabric.vb」もサービスと同じなので、サービスのものを「リンクとして追加」しています。
「web.config」は、下記のようにしました。
1: <appSettings>
2: <add key="solutionnamespace" value="helloappfabric2" />
3: <add key="issuer" value="owner" />
4: <add key="accountkey" value="????????????????????????????????????????????" />
5: </appSettings>
6:
7: <system.serviceModel>
8: <client>
9: <endpoint name="RelayEndpoint" binding="netTcpBinding" contract="HelloAppFabric_WebRole.IHelloAppFabric" />
10: </client>
11: </system.serviceModel>
「IHelloAppFabric.vb」を作ったとき、名前空間を指定しなかったので、
「endpoint」要素の「contract」を「HelloAppFabric_WebRole.IHelloAppFabric」にしました。
見つからないって、さんざん怒られたので……

「IHelloAppFabric.vb」を作ったとき、ちゃんと名前空間を指定して、
サービスとクライアントの「endpoint」要素の「contract」は同じにしておいた方が良いと思います。
あと、「binding="netTcpBinding"」としておくのが、ポイントです。
理由は、「良い本」に書いてあります。
「WebForm1.aspx」の「body」は、こんな感じ。
1: <body>
2: <form id="form1" runat="server">
3: <div>
4: <asp:Button ID="btnSayHello" runat="server" Text="好きです" />
5:
6: <asp:TextBox ID="txtYourName" runat="server" />
7: </div>
8: <div>
9: <asp:Label ID="lblMessageText" runat="server" />
10: </div>
11: </form>
12: </body>
「WebForm1.aspx.vb」はこんな感じ。
1: Imports System.Configuration
2: Imports System.ServiceModel
3: Imports System.ServiceModel.Description
4: Imports Microsoft.ServiceBus
5: Imports Microsoft.ServiceBus.Description
6:
7: Public Class WebForm1
8: Inherits System.Web.UI.Page
9:
10: Private Sub btnSayHello_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSayHello.Click
11:
12: ' エンドポイントのURIを生成
13: Dim serviceUri As Uri = ServiceBusEnvironment.CreateServiceUri("sb", ConfigurationManager.AppSettings("solutionnamespace"), "helloappfabric")
14:
15: ' エンドポイントに対する資格情報を生成し設定
16: Dim SBCredential As New TransportClientEndpointBehavior
17: SBCredential.CredentialType = TransportClientCredentialType.SharedSecret
18: SBCredential.Credentials.SharedSecret.IssuerName = ConfigurationManager.AppSettings("issuer")
19: SBCredential.Credentials.SharedSecret.IssuerSecret = ConfigurationManager.AppSettings("accountkey")
20:
21: ' クライアントチャンネルファクトリを生成し設定
22: Dim channelFactory As New ChannelFactory(Of IHelloAppFabricAppChannel)("RelayEndpoint", New EndpointAddress(serviceUri))
23: channelFactory.Endpoint.Binding = New NetTcpRelayBinding
24: channelFactory.Endpoint.Behaviors.Add(SBCredential)
25:
26: ' クライアントチャンネルを生成しOpen
27: Dim channel As IHelloAppFabricAppChannel = channelFactory.CreateChannel
28: channel.Open()
29:
30: ' サービスメソッドの使用
31: lblMessageText.Text = channel.SayHello(txtYourName.Text)
32:
33: ' 閉じる
34: channel.Close()
35: channelFactory.Close()
36:
37: End Sub
38:
39: End Class
「好きです」ボタンを押すと、処理を実行します。
「エンドポイントに対する資格情報」までは、サービスと同じです。
「channelFactory.Endpoint.Binding = New NetTcpRelayBinding」がポイントですが、
こちらの理由も「良い本」に書いてあります。
あと、「Microsoft.ServiceBus」の参照プロパティの「ローカル コピー」を「True」にします。

こちらの理由も「良い本」に書いてあります。
で、デプロイする時間はあるのか……終電との戦いだ。
…………できた!
名前を入力し……「好きです」ボタンをクリック!

「私も好きです。」って言われちゃったよ、えへへ。
サービス過剰じゃねーのか?

で、過剰なサービスはこちら。

何だ、この悲しいブログは!
今度は、もっとかっこいいサービスを作ろう……