第二弾。
タイトルの通り、SignalRの.NETクライアントライブラリのPortableバージョンです。
NuGetで公開しているので、すぐに使えます。「Microsoft.AspNet.SignalR.Client.Portable」で探してください。
(CodePlex: Microsoft.AspNet.SignalR.Client for Portable Class Library)
例によってVS2012でビルドしました。Xbox360は外れますが、Windows Phone 7.5はOKです。現在オフィシャルで配布しているNuGetのClientライブラリはWindows Phone 7.5が駄目なので、そっち方面の人にどうぞ。
インターフェイスに変更はありません。
こんなコードをクライアントに書いて(例はWP7.5):
// Page class (XAML code behind) public partial class MainPage : PhoneApplicationPage { private HubConnection client_; private IHubProxy sampleHub_; // Constructor public MainPage() { InitializeComponent(); } // Page loaded private void PhoneApplicationPage_Loaded(object sender, System.Windows.RoutedEventArgs e) { if (client_ == null) { client_ = new HubConnection("http://localhost:27224/"); sampleHub_ = client_.CreateHubProxy("SampleHub"); sampleHub_.On( "Receive", new Action<string>( x => this.Dispatcher.BeginInvoke( new Action(() => listBox.Items.Add(x.ToString()))))); client_.Start(); } } // Button clicked private void sendButton_Click(object sender, System.Windows.RoutedEventArgs e) { var r = new Random(); var message = string.Format("Random={0}", r.Next()); sampleHub_.Invoke("Send", message); } }
サーバー側に:
// OWIN Startup entry point definition [assembly: OwinStartup(typeof(MyWebApplication.Startup))] namespace MyWebApplication { // OWIN Startup Code public class Startup { public void Configuration(IAppBuilder app) { // SignalR mapping app.MapSignalR(); } } // The hub public class SampleHub : Hub { // Hub method public void Send(string text) { // Callback all client's "Receive" method. this.Clients.All.Receive(text); } } }
Page_Loadedで初期化すべきかどうかはちょっと甘いです(WPアプリの開発経験が浅いので)。正しいと思う方法で実装して下さい。