基于sliverlight + wcf的web 文字版IM 示例

演示地址: http://task.24city.com/default.html

预览界面:


一、布局
采用Grid布局,5行2列
第一行:为登录/注册信息区
第二行:左列为聊天记录区,右列为"最近联系人,我的好友,当前在线"等常见功能区
第三行:显示当前聊天对象以及"加为好友","从好友列表中删除"二个按钮
第四行: 打字聊天栏
第五行:发送按钮

二、机制
a.采用wcf通讯,silverlight调用wcf得到返回结果和发送聊天内容,wcf与数据库交互----即silverlight以wcf为桥梁来操作数据库
b.聊天记录的刷新采用Timer定时器,每隔5秒通过调用wcf更新
c.在线列表利用website中的Global全局字典来实现,每登录或注销一个用户时,均通过wcf向该字典中插入或删除指定key的"记录"

三、一些小技巧:

a.Ctrl+回车 键发送的实现代码:

private void txtContent_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            ModifierKeys keys = Keyboard.Modifiers;

            if (e.Key == Key.Enter && keys == ModifierKeys.Control)
            {
                btnSend_Click(sender, e);
            }
        }

b.TabControl中加载ListBox并附加滚动条的代码:

ListBox _listBox = new ListBox();
_listBox.ItemsSource = _list;
_listBox.DisplayMemberPath = "Value";
_listBox.MouseLeftButtonUp += new MouseButtonEventHandler(_listBox_MouseLeftButtonUp);
ScrollViewer _viewer = new ScrollViewer();
_viewer.Content = _listBox;
_listBox.BorderThickness = new Thickness(0);
this.tblItemRecently.Content = _viewer;
_viewer.Height = pnlTab.ActualHeight - 38;

即TabItem的Content指定为一个ScrollViewer,而这个ScrollViewer的Content再指定为ListBox,用二层嵌套实现


c.客户端登录Ip的取得

silverlight并不能直接取得IP地址,所以这里用website中的wcf做了中转,xap加载时就先利用wcf取回当前Ip,呵

四、代码
代码有点乱,也相对比较长,关键代码全部折叠贴在下面了:

MainPage.Xaml

 

MainPage.Xaml.cs

 

数据库表结构

 本来是要把源代码放上来了,一来是因为完全是用来练手的,代码写得比较乱,二来这里面用到了公司的一些现成工具库的dll,不方便对外发布,所以只能把主要代码贴出来,其实只要弄懂了原理,大家完全可以自己从头开发一遍,说穿了就是silverlight + wcf + timer来读写数据库,没有太多的技术含量

posted @ 2009-08-31 09:49  菩提树下的杨过  阅读(1934)  评论(5编辑  收藏  举报