第二弾。
タイトルの通り、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アプリの開発経験が浅いので)。正しいと思う方法で実装して下さい。