65.9K
CodeProject 正在变化。 阅读更多。
Home

A. R. 在线支持:基于 XML 的客户支持聊天解决方案

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.58/5 (20投票s)

2008年11月9日

CPOL

2分钟阅读

viewsIcon

152066

downloadIcon

5447

使用 ASP.NET(2.0)、C# 和 XML 作为数据库构建的客户支持聊天解决方案。

ChooseChannel.jpg

UserWindow.jpg

AgentResponse.jpg

引言

我检查过很多聊天解决方案,它们都依赖数据库。这些应用程序一旦数据库宕机就会失效,而在实际系统中,这种情况并不少见。因此,我决定构建一个与数据库无关的聊天解决方案。所以,XML 是最好的替代方案。

这是我的第一篇文章,A. R. 在线支持是我使用 XML 开发的第一个解决方案。

背景

A. R. 在线支持是一款在线聊天软件,使用 ASP.NET(2.0) 和 XML 开发。它易于使用,方便客户和客服人员进行一对一的实时沟通。它是一款灵活的在线聊天软件,可以一键提供客户支持。

主要功能包括

  1. 使用 HTML、JavaScript、XML、C# 和 Ajax 技术构建
  2. 无需数据库:由于基于 XML,因此不需要数据库。
  3. 无闪烁:基于先进的 Ajax 技术,聊天屏幕每秒刷新一次(可以自定义),屏幕上的更改不需要刷新屏幕。
  4. 无需 ActiveX 或插件等 - 因为它不是基于 Java 的,用户无需安装插件或在机器上安装 Java 组件。JavaScript、XML 和 C# ASP.NET 的组合使其成为可能。
  5. 不存储消息或用户内存,所有内容都存储在 XML 文件中。此功能允许在同一服务器上运行多个聊天室甚至聊天应用程序。
  6. 易于安装 - 只需要将服务器上的一个 *.zip 文件解压缩,创建一个虚拟目录,聊天就准备好了。
  7. 支持所有主流浏览器 - Internet Explorer、Netscape、Mozilla Firefox、Opera

代码演练

  1. 我将从一段用于反复调用服务器以获取最新信息的代码开始

    function InitializeTimer()
    {
        // Set the length of the timer,
        // in seconds. Your choice
        secs = 2;
        StopTheClock();
        StartTheTimer();
    }
    function StopTheClock()
    {
        if(timerRunning)
            clearTimeout(timerID);
        timerRunning = false
    }
    function StartTheTimer()
    {
        if (secs==0)
        {
            StopTheClock();
    	ajax_MakeAnAJAXGetCall();
            //Generate a Postback to the server
            InitializeTimer();
            // Start the timer again
        }
        else
        {
            secs = secs - 1;
            timerRunning = true;
            timerID = self.setTimeout("StartTheTimer()", delay);
        }
    }
    
    //AJAX Function
    function makeRequest()
    {
    	var xmlHttpRequest = null;
    	/*
    	* For Firefox, Mozilla, Safari
    	*/	
    	if (window.XMLHttpRequest)
    	{
    		xmlHttpRequest = new XMLHttpRequest();
    	}
    	/*
    	* For Microsoft Internet Explorer
    	*/
    	else if (typeof ActiveXObject != "undefined")
    	{
    		xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    	}
    	return xmlHttpRequest;
    }//END of Function makeRequest
    
    function ajax_MakeAnAJAXGetCall()
    {
    	ajaxObj = makeRequest();
    	//alert('HELLO');
    	if (ajaxObj != null)
    	{
    		var dt = new Date();		
    		var URL = serverURL;
    		URL += '?id=' + document.getElementById('lblID').innerHTML + 
    			'&dt1=' + dt.getHours()+ '&dt2=' + dt.getMinutes();
    		//alert(URL);
    		StopTheClock();
    		ajaxObj.open("GET", URL, true);
    		ajaxObj.onreadystatechange = ajax_CallBack;
    		ajaxObj.send(null);
    	}
    	else
    	{
    		
    	}	
    	return false;
    }
    
    function OpenPop(strId)
    {
        window.open('execChatWindow.aspx?id=' + strId,'','width=520,height=490');
    }
    
    function ContactServer()
    {
    	ajax_MakeAnAJAXGetCall(); //THis makes Ajax call to run 
    }
  2. 服务器端代码,用于获取用户/客服人员的消息

    string strResult = string.Empty;
    try
    {
      string chatId = Request.QueryString["cid"].ToString();
      string strXML = chatId + ".XML";  
      strResult = clsChatMessages.getUnReadMessages(Request.PhysicalApplicationPath, 
    		strXML,Request.QueryString["id"].ToString(), true);
    }
    finally
    {
    
    }

关注点

  1. 聊天是完全可定制的,即在 web.config 中有很多有趣的设置。
  2. 最初它不提供任何报告,但可以使用 XML 文件生成报告。

历史

  • 2008-11-09
    • 文章的初始发布
  • 2008-11-18
    • 聊天部门选择
    • [Bug 修复] 在聊天分配中
  • 2008-12-16
    • 客服人员之间的聊天转移
    • 密码加密 [RSA]
© . All rights reserved.