120 likes | 447 Views
WCF デモ. WCF を使ったネットワークアプリ作成. デモ内容. ゲームプロトタイプ キャラの位置を動かすだけのシンプルなもの 位置をサーバ側で管理 複数のクライアントで位置を同期. WCF とは. .NET Framework 3.0 で 追加されたウェブサービス基盤 Windows Communication Foundation http://msdn.microsoft.com/ja-jp/library/ms735119.aspx http://www.atmarkit.co.jp/fdotnet/wcf/index/index.html.
E N D
WCFデモ WCFを使ったネットワークアプリ作成
デモ内容 • ゲームプロトタイプ • キャラの位置を動かすだけのシンプルなもの • 位置をサーバ側で管理 • 複数のクライアントで位置を同期
WCFとは • .NET Framework 3.0で追加されたウェブサービス基盤 • Windows Communication Foundation • http://msdn.microsoft.com/ja-jp/library/ms735119.aspx • http://www.atmarkit.co.jp/fdotnet/wcf/index/index.html
ウェブサービスの構成要素 • エンドポイント: ABC • Address: どこで(Where) • http://ufcpp.net/Services, net.tcp://localhost/Services, etc. • Biding: どうやって(How) • HTTP/SOAP, TCP,named pipe, .NET Remoting, etc. • Contract: 何を(What) • 商取引、ゲーム、チャット、IM、SNS、etc.
エンドポイント • 1つのサーバ/クライアントが複数のエンドポイントを持てます クライアント サーバ 例1: 複数のContract A: http://ufcpp.net/game B: Basic HTTP C: ゲームサーバ A A A A B B B B C C C C A: http://ufcpp.net/chat B: Basic HTTP C: チャットサーバ
エンドポイント • 1つのサーバ/クライアントが複数のエンドポイントを持てます クライアント サーバ 例2: 複数のBinding A: http://ufcpp.net/game B: Basic HTTP C: ゲームサーバ A A A A B B B B C C C C A: net.pipe://localhost/game B: 名前付きパイプ C: ゲームサーバ
WCFContract • WCFでは、Contract(何をするか)に注力できます • 普通の.NETクラスライブラリに属性をつけるだけ [ServiceContract] interfaceIGameCharacter { void Move(Vector movement); } [ServiceContract] interfaceIGameCharacterCallback { void SetLocation(Point location); }
クラスライブラリとして利用 • Contractクラスは、単なるクラスライブラリとしても使えます デモ • ユーザからの入力に応じて丸が動く • WPFを利用
WCFにおけるABC • App.config/Web.configに設定を記述 <configuration> <system.serviceModel> <client> <endpoint name="GameCharacterIis" address="http://localhost/Services/Game.svc" binding="wsDualHttpBinding" contract="WcfGameSample.IGameCharacter"> </endpoint> </client> </system.serviceModel> </configuration>
デバッグ用ホストサーバ • WCFライブラリ • WCFサービスホストというデバッグ用のプログラムでホストしてくれる デモ
サービスをIISでホスト • .svcファイルを記述 • ASP.NETの.aspxと同じ要領 <%@ServiceHost Language="C#" Debug="true" Service="WcfGameSample.GameCharacter"%> デモ
セルフホストサーバ • ServiceHost,ChannelDispatcherクラスなどを使って自前でホスティング可能 Uri address = newUri("net.pipe://localhost/game"); NetNamedPipeBinding binding = newNetNamedPipeBinding(); Type contract = typeof(IGameCharacter); using (ServiceHostserviceHost = newServiceHost(typeof(GameCharacter))) { serviceHost.AddServiceEndpoint(contract, binding, address); Console.WriteLine("ENTERキーでサービス終了"); Console.ReadLine(); serviceHost.Close(); } デモ