使用 C# Web 服务创建聊天应用程序






4.85/5 (35投票s)
这是一个使用Web服务用C#编写的很酷的聊天应用程序,具有所有功能。
引言
我们或多或少每天都在使用市面上许多可用的聊天应用程序,但有时仍然会想知道它是如何开发的。这是一个使用Web服务用DotNet开发的简单私人聊天应用程序。
该应用程序(我称之为 EasyTalk)主要面向仍然有时害怕使用Web服务的初学者。观众将体验如何轻松开发Web服务并在聊天应用程序中使用它。
背景
聊天客户端就像其他聊天应用程序一样使用Windows窗体开发,而聊天服务则使用位于Web服务器上的Dot Net Web服务开发。
Zip文件内容
上面附加的zip文件包含以下项目
1. Chat Service - 这是要部署在任何Web服务器上的Web服务。
2. Chat Client - 这是用户将用于聊天的聊天应用程序。
3. Chat Setup - 可分发安装包。
4. Chat Testing - 用于测试Web服务。
使用代码
ChatService.asmx (Web服务)
zip文件中的ChatService.asmx代表Web服务的名称,您将在其中看到许多Web方法,这些方法将被应用程序的客户端调用。
[WebService(Namespace = "%22%22http://tempuri.org/%22%22">http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class ChatService : System.Web.Services.WebService { static protected ArrayList arrUsers = new ArrayList(); static protected ArrayList arrMessage = new ArrayList(); public ChatService () { //Uncomment the following line if using designed components //InitializeComponent(); }
请记住,这些方法始终是“public”的,否则它们将无法供外部世界访问。您只能将公共方法设置为Web方法,否则它们将被视为Web服务的私有方法。
让我们来了解其中的一些方法
[WebMethod] public void AddUser(string strUser) { arrUsers.Add(strUser); }
AddUser()方法会将登录的用户添加到Web服务维护的ArrayList中。这样,在线用户列表始终是最新的,并且可以在任何时候提供房间里的用户列表。
[WebMethod] public string GetUsers() { string strUser = string.Empty; for (int i = 0; i < arrUsers.Count; i++) { strUser = strUser + arrUsers[i].ToString() + "|"; } return strUser; }
GetUser()方法将检索已登录应用程序的用户列表。此列表可以随时从ArrayList轻松获取。
[WebMethod] public void RemoveUser(string strUser) { for (int i = 0; i < arrUsers.Count; i++) { if(arrUsers[i].ToString() == strUser) arrUsers.RemoveAt(i); } }
RemoveUser()方法则相反。当用户从应用程序注销时,它将从ArrayList中删除相应的名称。
[WebMethod] public void SendMessage(string strFromUser, string strToUser, string strMess) { arrMessage.Add(strToUser + ":" + strFromUser + ":" + strMess); }
SendMessage()方法将连接字符串(发送消息的用户名、发送消息的用户名和实际消息)作为参数,并将新字符串添加到另一个ArrayList中。这个ArrayList将简单地保存来自不同客户端发送给不同用户的消息。
[WebMethod] public string ReceiveMessage(string strUser) { string strMess = string.Empty; for (int i = 0; i < arrMessage.Count; i++) { string[] strTo = arrMessage[i].ToString().Split(':'); if (strTo[0].ToString() == strUser) { for (int j = 1; j < strTo.Length; j++) { strMess = strMess + strTo[j] + ":"; } arrMessage.RemoveAt(i); break; } } return strMess; }
ReceiveMessage()方法完成了所有工作。它将从ArrayList中过滤消息,并将每条消息发送给实际的接收者。
1. 它会逐一从ArrayList中取出消息。
2. 它会将消息中的“ToUser”名称与请求该方法的用户名进行比较。
3. 如果名称相同,则表示该消息仅发送给该接收者。它会将消息返回给用户,并在消息传输后从ArrayList中删除该消息。
ChatClient (客户端应用程序)
聊天用户列表窗口
聊天客户端使用Windows窗体开发。您会看到两个窗体,名为Form1用于显示在线用户列表,PrivateMessage用于聊天窗口。
在此解决方案中,我们将Web服务添加为该项目的Web引用。因此,每当您添加已部署在任何服务器上的Web服务时,客户端应用程序都会将该路径注册到服务器。
Form1是用于填充已登录EasyTalk应用程序的在线用户列表的界面。此应用程序没有登录窗体,因为用户名是从Windows登录名自动分配的。同一名称将显示在列表中,单击该名称将打开一对一的对话窗口与该人聊天。此窗体附加了一个计时器,该计时器每2秒调用Web服务中的GetUser() Web方法来更新在线用户列表。
附加功能
1. 每当有用户登录应用程序时,所有在线用户的机器屏幕右下角都会弹出一个通知窗口,显示新在线用户的名称。[截图如下]
2. 当用户最小化聊天窗口时,新消息将以弹出窗口的形式发送给该用户,就像上面的gtalk中的窗口一样,从屏幕右下角出现。
3. 如果用户不想在弹出窗口中接收消息,他可以选择主窗口底部的复选框“停止消息警报服务”。
聊天窗口
另一个窗体是privateMessage,它允许用户与其他人交谈。此窗体还附加了一个计时器,该计时器会调用ReceiveMessage()方法来检查是否有新消息到达。因此,如果一个用户打开了3个窗口,则相应的窗口将通过计时器查找自己的消息。
在应用程序中,还使用了notifyIcon控件,以便用户可以将应用程序保持在系统托盘中运行。该应用程序关联了一个菜单,通过该菜单,
此应用程序中使用的一个醒目的功能是,每当收到新消息时,聊天窗口会闪烁。闪烁将一直持续到用户单击窗口读取消息为止。这是使用Windows API完成的。
[DllImport("user32.dll")] static extern Int32 FlashWindowEx(ref FLASHWINFO pwfi);
配置窗口
有一个配置窗口用于更改服务器名称/IP地址。如果Web服务部署在不同的聊天服务器上,用户只需通过配置窗口将新的IP地址提供给应用程序。
关注点
这只是使用Web服务创建非常简单的聊天应用程序的一种方式。您可以使用不同的方法来创建此应用程序。您可以通过创建更多功能,如公共聊天、会议等,进一步改进此应用程序。
祝您聊天愉快!!!!!
历史
在此处保持您所做的任何更改或改进的实时更新。