这是来公司做的第二个项目实例。最近在学习WCF方面的知识,看了一些资料,于是做了这个可以实现聊天功能的项目实例。
新建WCF服务和Silverlight项目就不说了主要来看代码:
WCF服务契约与数据契约:
<span style="color:#FF0000;"> [ServiceContract(CallbackContract = typeof(IMessageCallBack))]</span>
public interface IMessageManage
{
[OperationContract]
bool SendMessage(MessageInfo msg);
[OperationContract]
bool RequestMessage(UserInfo user);
[OperationContract]
List<UserInfo> GetUserInfo();
[OperationContract]
bool CreateUser(UserInfo user);
}
public interface IMessageCallBack
{
<span style="color:#FF0000;">
[OperationContract(IsOneWay = true)]
void GetMessage(MessageInfo message);</span>
}
<pre name="code" class="csharp"><span style="color:#FF0000;">[DataContract]</span>
public class MessageInfo { [DataMember] public UserInfo FromUser { get; set; } [DataMember] public UserInfo ToUser { get; set; } [DataMember] public string Content { get; set; } [DataMember] public DateTime SendTime { get; set; } }[DataContract] public class UserInfo {
[DataMember] public int Id { get; set; } [DataMember] public string Name { get; set; } }
WCF的实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
<span style="background-color: rgb(255, 0, 0);">using WcfModel;</span>
namespace WcfService
{
public class MessageService : IMessageManage
{
private static Dictionary<int, IMessageCallBack> DicCallChannel = new Dictionary<int, IMessageCallBack>();
public static List<UserInfo> getuserTemp = new List<UserInfo>();
private int UserId = 0;
public bool CreateUser(UserInfo user)
{
if (getuserTemp == null)
getuserTemp = new List<UserInfo>();
bool r = false;
foreach (UserInfo list in getuserTemp)
{
if (list.Id.Equals(user.Id))
{
r = true;
}
}
if (r)
{
return false;
}
getuserTemp.Add(user);
return true;
}
public bool SendMessage(MessageInfo msg)
{
if (DicCallChannel.Keys.Contains(msg.ToUser.Id))
{
DicCallChannel[msg.ToUser.Id].GetMessage(msg);
return true;
}
return false;
}
public bool RequestMessage(UserInfo user)
{
IMessageCallBack channel = OperationContext.Current.GetCallbackChannel<IMessageCallBack>();
if (!DicCallChannel.Keys.Contains(user.Id))
{
DicCallChannel.Add(user.Id, channel);
UserId = user.Id;
OperationContext.Current.Channel.Closing += Channel_Closing;
}
return true;
}
void Channel_Closing(object sender, EventArgs e)
{
if (DicCallChannel.Keys.Contains(UserId))
{
DicCallChannel.Remove(UserId);
}
}
public List<UserInfo> GetUserInfo()
{
return getuserTemp;
}
}
}
MainPage前台代码:
<UserControl x:Class="SilverlightApplication.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="600" d:DesignWidth="800" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" >
<Grid x:Name="LayoutRoot" Background="White" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" Height="700">
<StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" Height="456" Margin="286,92,259,152" Width="228">
<!--<Button x:Name="btnCreateUser1" Content="Create User1" Width="100" Margin="0,10,0,0" Click="btnCreateUser1_Click" />
<Button x:Name="btnCreateUser2" Content="Create User2" Width="100" Margin="0,10,0,0" Click="btnCreateUser2_Click" />-->
<telerik:GroupBox Height="300" Name="groupBox2" Width="200" Header="收">
<TextBox x:Name="txtContentRecord" Width="182" Height="261" IsReadOnly="True" Margin="0,10,0,0" TextWrapping="Wrap" />
</telerik:GroupBox>
<telerik:GroupBox Height="107" Name="groupBox3" Width="200" Header="发" Margin="0,30,0,0">
<StackPanel>
<TextBox x:Name="txtContent" Width="182" Height="30" Margin="0,10,0,0" AllowDrop="False" AcceptsReturn="True" TextWrapping="Wrap" />
<Button x:Name="btnSend" Content="Send" Width="100" Margin="0,10,0,0" Click="btnSend_Click">
</Button>
</StackPanel>
</telerik:GroupBox>
</StackPanel>
<StackPanel Margin="27,92,514,152">
<!--<ListBox Width="100" Height="60" x:Name="lstgu" ></ListBox>-->
<!--<TextBox x:Name="txtGU" Width="100" Height="100"></TextBox>-->
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10,0,0" Width="202" Height="209">
<telerik:GroupBox Height="180" Name="groupBox4" Width="118" Header="User List" Margin="10,10,0,0">
<sdk:DataGrid DataContext="{Binding}" AutoGenerateColumns="False" Height="125" Name="dataGrid1" Width="89" Margin="0,10,0,0" SelectionChanged="dataGrid1_SelectionChanged" IsReadOnly="True">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="Id" Width="Auto" Binding="{Binding Id}" />
<sdk:DataGridTextColumn CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="Name" Width="Auto" Binding="{Binding Name}" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</telerik:GroupBox>
<Button x:Name="btnRefreshUser" Click="btnRefreshUser_Click" Width="63" Height="20" Margin="10,0,0,0" IsEnabled="False">Refresh</Button>
</StackPanel>
<telerik:GroupBox Height="116" Name="groupBox1" Width="202" Header="User Login">
<StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,10,0,0">
<TextBlock TextAlignment="Center" VerticalAlignment="Center">Id:</TextBlock>
<TextBox x:Name="CurrentId" Width="60" Margin="21,0,0,0" ></TextBox>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock TextAlignment="Center" VerticalAlignment="Center">Name:</TextBlock>
<TextBox x:Name="CurrentName" Width="60" ></TextBox>
</StackPanel>
<StackPanel x:Name="login">
<Button x:Name="Login" Click="Login_Click" Width="95" Margin="0,10,0,0">Login</Button>
</StackPanel>
</StackPanel>
</telerik:GroupBox>
<!--<telerik:GroupBox Height="134" Name="groupBox5" Width="202" Header="Create User">
<StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,10,0,0">
<TextBlock TextAlignment="Center" VerticalAlignment="Center">Id:</TextBlock>
<TextBox x:Name="CreateUserId" Width="60" Margin="21,0,0,0"></TextBox>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock TextAlignment="Center" VerticalAlignment="Center">Name:</TextBlock>
<TextBox x:Name="CreateUserName" Width="60"></TextBox>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10,0,0">
<Button x:Name="btnCreateUser" Click="btnCreateUser_Click">CreateUser</Button>
</StackPanel>
</StackPanel>
</telerik:GroupBox>-->
</StackPanel>
</Grid>
</ScrollViewer>
</UserControl>
MainPage后台代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using SilverlightApplication.MessageService;
using System.ComponentModel;
using System.Collections.ObjectModel;
namespace SilverlightApplication
{
public partial class MainPage : UserControl
{
MessageInfo message = new MessageInfo();
public List<UserInfo> listuser = new List<UserInfo>();
//string p;
//string p_2;
//string p_3;
//bool refresh = false;
public MainPage()
{
InitializeComponent();
getlistuser();
//UserInfo rtouser = new UserInfo();
//rtouser.Id=Convert.ToInt32(this.CurrentId.Text);
//rtouser.Name = this.CurrentName.Text;
}
//public MainPage(string p, string p_2,string p_3)
//{
// InitializeComponent();
// this.p = p;
// this.p_2 = p_2;
// this.CurrentId.Text = p;
// this.CurrentName.Text = p_2;
// this.txtContentRecord.Text = p_3;
// rgetlistuser();
// this.CurrentId.IsReadOnly = true;
// this.CurrentName.IsReadOnly = true;
// this.login.Visibility = Visibility.Collapsed;
//}
public void getlistuser()
{
MessageManageClient client = new MessageManageClient();
client.GetUserInfoCompleted += new EventHandler<GetUserInfoCompletedEventArgs>(client_GetUserInfoCompleted);
client.GetUserInfoAsync();
}
void client_GetUserInfoCompleted(object sender, GetUserInfoCompletedEventArgs e)
{
if (e.Result != null)
{
foreach (var list in e.Result)
{
listuser.Add(list);
}
//this.dataGrid1.ItemsSource = listuser;
}
else
{
MessageBox.Show("当前用户列表为空!");
}
}
//public void rgetlistuser()
//{
// ChatServiceClient client = new ChatServiceClient();
// client.GetUserInfoCompleted += new EventHandler<GetUserInfoCompletedEventArgs>(client_GetUserInfoCompletedR);
// client.GetUserInfoAsync();
//}
//void client_GetUserInfoCompletedR(object sender, GetUserInfoCompletedEventArgs e)
//{
// listuser.Clear();
// if (e.Result != null)
// {
// foreach (var list in e.Result)
// {
// listuser.Add(list);
// }
// this.dataGrid1.ItemsSource = listuser;
// }
// else
// {
// MessageBox.Show("当前用户列表为空!");
// }
//}
//private ObservableCollection<UserInfo> _listuser = null;
//private void btnCreateUser1_Click(object sender, RoutedEventArgs e)
//{
// this.btnCreateUser2.IsEnabled = false;
// ChatServiceClient client = new ChatServiceClient();
// UserInfo formUser = new UserInfo()
// {
// Id = 123,
// Name = "张三"
// };
// //creatuser1 = formUser;
// //getuser.Add(formUser);
// UserInfo toUser = new UserInfo()
// {
// Id = 234,
// Name = "李四",
// };
// message.FromUser = formUser;
// message.ToUser = toUser;
// message.Content = txtContent.Text;
// message.SendTime = DateTime.Now;
// client.RequestMessageCompleted += new EventHandler<RequestMessageCompletedEventArgs>(client_RequestMessageCompleted);
// client.RequestMessageAsync(formUser);
// //client.GetUserInfoAsync(formUser);
// client.GetMessageReceived += new EventHandler<GetMessageReceivedEventArgs>(client_GetMessageReceived);
// //client.RequestMessageCompleted += (rs, re) =>
// //{
// // if (re.Result)
// // {
// // MessageBox.Show("用户" + formUser.Id + "创建成功!");
// // }
// //};
// //client.GetMessageReceived += (gs, ge) =>
// //{
// // if (ge.Error == null)
// // {
// // txtContentRecord.Text += "\r" + "来自:" + ge.message.FromUser.Name + ",内容:" + ge.message.Content + ",时间:" + ge.message.SendTime.ToShortTimeString();
// // }
// //};
//}
//void client_RequestMessageCompleted(object sender, RequestMessageCompletedEventArgs e)
//{
// if (e.Result)
// {
// MessageBox.Show("通道创建成功!");
// }
//}
//void client_GetMessageReceived(object sender, GetMessageReceivedEventArgs e)
//{
// if (e.Error == null)
// {
// //txtContentRecord.Text +="\r\n"+ "来自:" + e.message.FromUser.Name + ",内容:" + e.message.Content + ",时间:" + e.message.SendTime.ToShortTimeString()+"\r\n";
// if (this.txtContentRecord.Text == "")
// {
// txtContentRecord.Text +=e.message.FromUser.Name + e.message.SendTime.ToShortTimeString() + ":"+"\r\n" + e.message.Content ;
// }
// else
// {
// txtContentRecord.Text += "\r\n" + e.message.FromUser.Name + e.message.SendTime.ToShortTimeString() + ":" + "\r\n" + e.message.Content;
// }
// }
//}
//private void btnCreateUser2_Click(object sender, RoutedEventArgs e)
//{
// this.btnCreateUser1.IsEnabled = false;
// ChatServiceClient client = new ChatServiceClient();
// UserInfo formUser = new UserInfo()
// {
// Id = 234,
// Name = "李四"
// };
// //creatuser2 = formUser;
// //getuser.Add(formUser);
// UserInfo toUser = new UserInfo()
// {
// Id = 123,
// Name = "张三",
// };
// message.FromUser = formUser;
// message.ToUser = toUser;
// message.Content = txtContent.Text;
// message.SendTime = DateTime.Now;
// client.RequestMessageCompleted += new EventHandler<RequestMessageCompletedEventArgs>(client_RequestMessageCompleted1);
// client.RequestMessageAsync(formUser);
// client.GetMessageReceived += new EventHandler<GetMessageReceivedEventArgs>(client_GetMessageReceived1);
// //client.GetUserInfoAsync(formUser);
// //client.RequestMessageCompleted += (rs, re) =>
// //{
// // if (re.Result)
// // {
// // MessageBox.Show("用户" + formUser.Id + "创建成功!");
// // }
// //};
// //client.GetMessageReceived += (gs, ge) =>
// //{
// // if (ge.Error == null)
// // {
// // txtContentRecord.Text += "\r" + "来自:" + ge.message.FromUser.Name + ",内容:" + ge.message.Content + ",时间:" + ge.message.SendTime.ToShortTimeString();
// // }
// //};
//}
private void btnSend_Click(object sender, RoutedEventArgs e)
{
if (this.txtContent.Text == "" || this.dataGrid1.SelectedItem == null)
{
MessageBox.Show("消息内容为空或没有选择聊天对象!");
}
else
{
MessageManageClient client = new MessageManageClient();
message.Content = txtContent.Text;
message.SendTime = DateTime.Now;
client.SendMessageCompleted += new EventHandler<SendMessageCompletedEventArgs>(client_SendMessageCompleted);
client.SendMessageAsync(message);
//client.SendMessageCompleted += (ds, de) =>
//{
// if (de.Result)
// {
// MessageBox.Show("发送成功!");
// }
// else
// {
// MessageBox.Show("发送失败!");
// }
//};
}
}
void client_SendMessageCompleted(object sender, SendMessageCompletedEventArgs e)
{
if (e.Result)
{
if (this.txtContentRecord.Text == "")
{
this.txtContentRecord.Text += this.CurrentName.Text + DateTime.Now.ToShortTimeString() + ":" + " \r\n" + this.txtContent.Text;
this.txtContent.Text = "";
MessageBox.Show("发送成功!");
}
else
{
this.txtContentRecord.Text += "\r\n" + this.CurrentName.Text + DateTime.Now.ToShortTimeString() + ":" + " \r\n" + this.txtContent.Text;
this.txtContent.Text = "";
MessageBox.Show("发送成功!");
}
}
else
{
MessageBox.Show("发送失败!");
this.txtContent.Text = "";
}
}
//private void btnGU_Click(object sender, RoutedEventArgs e)
//{
// ChatServiceClient client = new ChatServiceClient();
// client.GetUserInfoCompleted += new EventHandler<GetUserInfoCompletedEventArgs>(client_GetUserInfoCompleted);
// client.GetUserInfoAsync();
// int i;
// for (i = 0; i < getuser.Count; i++)
// {
// client.GetUserInfoAsync(getuser[i]);
// }
//}
//private void btnGU_Click(object sender, RoutedEventArgs e)
//{
// MessageManageClient client = new MessageManageClient();
// client.GetUserInfoCompleted += new EventHandler<GetUserInfoCompletedEventArgs>(client_GetUserInfoCompleted);
// client.GetUserInfoAsync();
//}
//void client_GetUserInfoCompleted(object sender, GetUserInfoCompletedEventArgs e)
//{
// //this.lstgu.ItemsSource = e.Result;
// this.dataGrid1.ItemsSource = e.Result;
// //List<UserInfo> list=new List<UserInfo>();
// //list = e.Result;
// //this.lstgu.Items.Add(
// // new TextBlock
// //{
// // Text = "用户名:",
// // TextWrapping = TextWrapping.Wrap
// //}
// //);
//UserInfo abc=new UserInfo();
//abc = e.Result;
//if (this.txtGU.Text == "")
//{
// this.txtGU.Text += "Id:" + e.Result.Id + "\r\n" + "Name:" + e.Result.Name;
//}
//else
//{
// this.txtGU.Text += "\r\n" + "Id:" + e.Result.Id + "\r\n" + "Name:" + e.Result.Name;
//}
//}
//private void btnCreateUser_Click(object sender, RoutedEventArgs e)
//{
// UserInfo create = new UserInfo();
// create.Id = Convert.ToInt32(this.CreateUserId.Text);
// create.Name = this.CreateUserName.Text;
// ChatServiceClient client = new ChatServiceClient();
// client.CreateUserCompleted += new EventHandler<CreateUserCompletedEventArgs>(client_CreateUserCompleted);
// client.CreateUserAsync(create);
// client.GetUserInfoCompleted += new EventHandler<GetUserInfoCompletedEventArgs>(client_GetUserInfoCompleted);
// client.GetUserInfoAsync();
// App app = (App)Application.Current;
// app.RedirectTo(new MainPage());
//}
//void client_CreateUserCompleted(object sender, CreateUserCompletedEventArgs e)
//{
// if (e.Result!=null)
// {
// MessageBox.Show("用户创建成功!");
// //_listuser = e.Result;
// //this.dataGrid1.ItemsSource = e.Result;
// this.CreateUserId.Text = "";
// this.CreateUserName.Text = "";
// this.groupBox1.Visibility = Visibility.Visible;
// this.CurrentId.Text = Convert.ToString(e.Result.Id);
// this.CurrentName.Text = e.Result.Name;
// this.groupBox5.Visibility = Visibility.Collapsed;
// //lstgu.Items.Add
// // (
// // new TextBlock
// // {
// // Text = "Id:" + e.Result.Id+"\n"+ "Name:" + e.Result.Name,
// // TextWrapping = TextWrapping.Wrap
// // }
// // );
// }
// else
// {
// MessageBox.Show("用户创建失败!");
// }
//}
//private void btnGU_Click(object sender, RoutedEventArgs e)
//{
// ChatServiceClient client = new ChatServiceClient();
// client.GetUserInfoCompleted += new EventHandler<GetUserInfoCompletedEventArgs>(client_GetUserInfoCompleted);
// client.GetUserInfoAsync();
//}
private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
UserInfo stouser = new UserInfo();
stouser = (UserInfo)this.dataGrid1.SelectedItem;
if (this.dataGrid1.SelectedItem == null)
{
tongxin();
}
else
{
MessageManageClient client = new MessageManageClient();
UserInfo formUser = new UserInfo()
{
Id = Convert.ToInt32(this.CurrentId.Text),
Name = this.CurrentName.Text,
};
UserInfo toUser = new UserInfo()
{
Id = stouser.Id,
Name = stouser.Name,
};
message.FromUser = formUser;
message.ToUser = toUser;
message.Content = txtContent.Text;
message.SendTime = DateTime.Now;
client.RequestMessageCompleted += new EventHandler<RequestMessageCompletedEventArgs>(client_RequestMessageCompleted);
client.RequestMessageAsync(formUser);
client.GetMessageReceived += new EventHandler<GetMessageReceivedEventArgs>(client_GetMessageReceived);
}
}
void client_RequestMessageCompleted(object sender, RequestMessageCompletedEventArgs e)
{
if (e.Result)
{
MessageBox.Show("当前用户通信通道创建成功!");
}
}
void client_GetMessageReceived(object sender, GetMessageReceivedEventArgs e)
{
if (e.Error == null)
{
//txtContentRecord.Text += "\r\n"+"来自:" + e.message.FromUser.Name + ",内容:" + e.message.Content + ",时间:" + e.message.SendTime.ToShortTimeString()+"\r\n";
if (this.txtContentRecord.Text == "")
{
txtContentRecord.Text += e.message.FromUser.Name + e.message.SendTime.ToShortTimeString() + ":" + "\r\n" + e.message.Content;
}
else
{
txtContentRecord.Text += "\r\n" + e.message.FromUser.Name + e.message.SendTime.ToShortTimeString() + ":" + "\r\n" + e.message.Content;
}
}
}
private void Login_Click(object sender, RoutedEventArgs e)
{
if (this.CurrentId.Text == "" || this.CurrentName.Text == "")
{
MessageBox.Show("Id或Name不能为空!");
}
else
{
UserInfo currentuser = new UserInfo();
currentuser.Id = Convert.ToInt32(this.CurrentId.Text);
currentuser.Name = this.CurrentName.Text;
bool isSuccess = false;
foreach (UserInfo u in listuser)
{
if (u.Id.Equals(currentuser.Id) && u.Name.Equals(currentuser.Name))
{
isSuccess = true;
}
}
if (isSuccess)
{
MessageBox.Show("用户" + currentuser.Name + "登录成功!");
this.btnRefreshUser.IsEnabled = true;
this.dataGrid1.ItemsSource = listuser;
this.CurrentId.IsReadOnly = true;
this.CurrentName.IsReadOnly = true;
this.login.Visibility = Visibility.Collapsed;
tongxin();
}
else
{
MessageBox.Show("用户" + currentuser.Name + "登录失败!");
}
}
}
private void btnRefreshUser_Click(object sender, RoutedEventArgs e)
{
//App app = (App)Application.Current;
//app.RedirectTo(new MainPage(this.CurrentId.Text.Trim(), this.CurrentName.Text.Trim(), this.txtContentRecord.Text.Trim()));
//this.dataGrid1.ItemsSource = null;
//refresh = true;
MessageManageClient client = new MessageManageClient();
client.GetUserInfoCompleted += new EventHandler<GetUserInfoCompletedEventArgs>(client_GetUserInfoCompleted12);
client.GetUserInfoAsync();
}
void client_GetUserInfoCompleted12(object sender, GetUserInfoCompletedEventArgs e)
{
if (e.Result != null)
{
List<UserInfo> rlistuser = new List<UserInfo>();
foreach (var list in e.Result)
{
rlistuser.Add(list);
}
this.dataGrid1.ItemsSource = rlistuser;
}
else
{
MessageBox.Show("当前用户列表为空!");
}
}
public void tongxin()
{
MessageManageClient client = new MessageManageClient();
UserInfo formUser = new UserInfo()
{
Id = Convert.ToInt32(this.CurrentId.Text),
Name = this.CurrentName.Text,
};
UserInfo toUser = new UserInfo()
{
Id = formUser.Id,
Name = formUser.Name,
};
message.FromUser = formUser;
message.ToUser = toUser;
message.Content = txtContent.Text;
message.SendTime = DateTime.Now;
client.RequestMessageCompleted += new EventHandler<RequestMessageCompletedEventArgs>(client_RequestMessageCompleted123);
client.RequestMessageAsync(formUser);
client.GetMessageReceived += new EventHandler<GetMessageReceivedEventArgs>(client_GetMessageReceived);
}
void client_RequestMessageCompleted123(object sender, RequestMessageCompletedEventArgs e)
{
if (e.Result)
{
//MessageBox.Show("当前用户通信通道创建成功!");
}
}
}
}
本实例的一些配置主要参照了下文:
http://blog.csdn.net/cyb331/article/details/9185801
感谢该博主。