Silverlight4でnetTcpBindingの双方向通信を使う。
Silverlight4からnetTcpBindingが使えるようになり、
通信のパフォーマンスが大幅に向上したみたいなので、いろいろメモ。
VisualStudio2010でのSilverlightにおけるサービス参照の追加がより便利になりました。
外部のSvcutilのようなものを使わなくてもIDEが勝手にプロキシコード生成してくれます。
silverlight4をnettcpを使用する際に必要だったこと。
■WCFサービス関連
silverlight4のDuplex通信では、request/reply型のcallbackが使用できないようです。
そのため、callbackのメソッドに
[OperationContract(IsOneWay = true, AsyncPattern = true)]
みたく、IsOneWayを宣言してやる必要があるようです。
■ポート関連
silverlight4で使用できるポートは、4502-4534に限られているようです。
また、ポート943を最初に使用するようです。
これらのポートを解放する必要がありました。
「Silverlight TCP Socket Policy」
http://visualstudiogallery.msdn.microsoft.com/ja-JP/c4534af5-e864-42c2-b351-094593864e78
自動で943Portに確認しにきたものに対して返答してくれるプログラム。
これを起動しておけば、943への返答を自動で行ってくれるようです。
■IIS関連
nettcpを使用するために、iisのウェブサイトに設定をする必要がある。
「バインドの編集」と「詳細設定」でnettcpを許可する。
詳しくは下記のページを参照するといいと思います。
http://www.silverlightshow.net/items/WCF-NET.TCP-Protocol-in-Silverlight-4.aspx
http://tomasz.janczuk.org/2009/11/wcf-nettcp-protocol-in-silverlight-4.html
dotwowAPIのWCFサービスを公開。.NETプログラムからでも通信プログラムが簡単に開発できます。
dotWowのAPIを.NETFramework経由でも使用できるように公開しました。
C#,VB.netなどからでもdotwowAPIを利用してユーザー同士のコミュニケーションを簡単に実装できるはずです。
[dotWowServiceReference]
http://www99.dotwow.net/chatservice.svc
このURLをVisualStudioのサービス参照の追加をすれば、
WCFサービスとして使用することができます。
使用方法。
1・IChatCallbackを実装したクラスを作成します。
public class ChatCallBack : IChatCallback { //略・実装 }
2・サービスクライアントの作成方法
InstanceContext context = new InstanceContext(new ChatCallBack()); ChatClient client = new ChatClient(context, "NetTcpBinding_IChat"); EndpointAddressBuilder builder = new EndpointAddressBuilder(client.Endpoint.Address); AddressHeader header = AddressHeader.CreateAddressHeader("id", "http://www.dotwow.net", "***あなたのApiId"); builder.Headers.Add(header); AddressHeader headerKey = AddressHeader.CreateAddressHeader("key", "http://www.dotwow.net", "***あなたのApiKey"); builder.Headers.Add(headerKey); client.Endpoint.Address = builder.ToEndpointAddress();
3・クライアント経由で様々なメソッドを実行できます。
例
client.join(***);
client.Say(***);
とりあえずヘッダーにAPI情報を記入する形にしてしまいました。
そのうち変更するかもしれません。
APIKeyやAPIIDは以下のページから作成してください。
http://www.dotwow.net/api/default.aspx
クラインとを作成すれば、dotwowのユーザアカウントでログインすると、stringで値が返ってきます。
その後は、その値(key)とユーザーIDでdotwowのさまざまなAPIが使用できます。
このKeyはログインするたびに変更されます。
一部メソッドが正確に動作しません。
詳しくは、そのうちヘルプに記載する予定です。
JavaScriptでの双方向通信用ライブラリを公開。
dotwowのAPIを利用して、JavaScriptで通信するライブラリを公開しました。
「dotWowConnectScriptLibrary(.WCSL)」
http://www.dotwow.net/api/default.aspx
少量のコードを書くだけで、ページ閲覧者同士が通信できるようになります。
Comet(Ajaxの通信形態のひとつ)を利用しているので、スムーズな通信が可能です。
あなたのウェブページ上で手軽にユーザーとのリアルタイム通信機能を追加することができます。
上記のURLより、アプリIDとアプリKEYを登録してご利用ください。(ユーザー登録が必要です)
■サンプルコード(AppidとappKeyを入力してください)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title></title> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("jquery", "1.3.2");</script> <script src="connectscript.js" type="text/javascript"></script> <script type="text/javascript"> function received(data) { for (var i in data) { $("#conversation").append(data[i].SenderId + ":" + data[i].Message+"<br />"); } } function joined(data) { $("#userID").append("Your ID: " + connectScript.userId); for (var i in connectScript.users) { $("#SelectTarget").append("<option>" + connectScript.users[i].UserID + "</option>"); } } var connectScript = new connectScript(); function startConnect() { connectScript.appId = "*********"; connectScript.appKey = "*********"; connectScript.set_receive(received); connectScript.set_join(joined); connectScript.initialize(); } function send() { var target = $("#SelectTarget").val(); var content = $("#contentTextBox").val(); connectScript.send(target, content); } </script> </head> <body onload="startConnect()"> <div id="userID"></div> <div><select style="width:100px" id="SelectTarget" name="D1"> <option></option> </select> <input id="contentTextBox" style="width:200px" type="text" /><input type="button" onclick="send()" value="Send" /></div> <div id="conversation"></div> </body> </html>
メッセージの種類やJSONのパラメータの説明など詳細は後程、helpに掲載する予定です。
http://help.dotwow.net/
要望やバグがありましたら、ご連絡してください。
また、現在はベータということで、「他のAPIからの接続許可」「コールバックURL」などは動作しません。
.WCSL及び、サンプルにはjQueryを使用しています。
Mixiアプリで話題のOpenSocial機能をドットワウに追加しました。
ウェブLiveMessengerクライアントを作成しました。
いろいろなコミュニケーションツールを繋げようということで、
今回はLiveMessengerのクライアントを設置しました。
よろしければ使ってみてください。
メッセージを受け取ると、ホームタブでも表示されます。
「dotwow - LiveMessengerクライアント」
http://www.dotwow.net/?mode=live
ほぼLive Messenger Tool Kitをいじくっただけです。
イベントのフックは。
ConversationListにて、OnConversationCreated。
その引数のConversationにて、OnMessageReceivedをフックしています。
・・・OnMessageReceivedでは受け取った時のみ発生するので、
自分が送信した内容を獲得できない。
Sendするイベントを受け取ってホームのログに乗せたいのだけどどうすればいいのだろうかー。
参考URL
http://msdn.microsoft.com/ja-jp/library/cc298451.aspx
http://msdn.microsoft.com/en-us/library/microsoft.live.messenger.ui.tags.conversationtag_members.aspx
http://msdn.microsoft.com/en-us/library/microsoft.live.messenger.contact.addresses.aspx
ウェブIRCクライアントを作成しました。
dotwowにて、IRCに接続するwebサービスを公開しました。
「connect with IRC(beta)」
http://www.dotwow.net/?mode=irc
もともと自分はIRCのクライアントにはLimechatを使用していて、
それと同じようなインターフェースがウェブベースでも使えれば便利かなと考えてみました。
「Limechat」
http://limechat.net/
もしよかったら使ってみてください。
Aajxを利用しているので、リロードの必要はありません。
また、発言があった場合にはホームにも表示されます。
現在は、とりあえずつないで発言ができる程度です。
キーボードショートカットやコマンド、カスタマイズはまだほとんどできません。
バグや要望があればご連絡ください。
Mixiアプリ「Mixiルーム」を公開しました
dotwowのルームをMixiでも使えるオープンソーシャルアプリを作成しました。
http://mixi.jp/view_appli.pl?id=8962
もしよろしければ使ってみてください。
[Mixiルームの機能]
アプリガジェットを設置すると、現在誰があなたのページを閲覧しているかがわかり、またそのユーザーとチャットをすることができます。
また、ログも残るので簡単な掲示板/BBSとしても利用できます。
左下のコンボボックスに、ユーザーIDを入力してメッセージを送信するとプライベートメッセージが送信できます。
■参考にしたページ
「MixiDeveloperCenter」apiについて全般
http://developer.mixi.co.jp/appli
「opensocial-jquery」Opensocialで使えるJquery
http://code.google.com/p/opensocial-jquery/#Demo
「googleGroup」複数のビューについて
http://groups.google.co.jp/group/opensocial-japan/browse_thread/thread/85ac7603a532a15e
「のほほんラボ」adjustHeightについて
http://nohohonlab.exblog.jp/8458109/
せっかくオープンソーシャルアプリなので、Myspaceなどへも掲載していきたいと考えます。
それと、dotwow自体でもオープンソーシャルアプリのホストができたらおもしろそうなので、少し勉強します。
「OpenSocial アプリケーションのホスト」 仕様
http://code.google.com/intl/ja/apis/opensocial/container.html
「pesta」.net制のコンテイナ
http://code.google.com/p/pesta/