Web服务接口使用示意图

    通过我们提供的Web服务编程接口和客户端COM接口,轻松地实现和你的软件系统对接,从而按你的需要对数据进行处理和分析。 比如在你的系统中查询用户话费;查询旅客消费明细;餐饮管理系统或视频点播系统向酒店管理系统传送在住旅客消费信息;IC卡、房卡、电子门锁系统、公安上报系统从酒店系统读取旅客信息等。如图一所示:

 

           图一 通过Web服务接口和客户端COM接口实现与第三方应用系统的对接

说明:

    服务端操作系统可以使用 Win2000、WinXP、Win2003、Window Vista等,这些系统都自带IIS(微软的信息服务器)。MS SqlServer 建议使用 MS SqlServer2000 。

   Web服务接口是我们开发的服务器端WEB服务程序,通过该服务程序可以接受客户端的Http/Soap服务请求,提供客户端需要的服务。因为使用了Http/Soap协议,所以也可以通过INTERNET来请求WEB服务,使你可以更灵活的配置系统方案。另外,与DCOM接口相比,使用Http/Soap协议的服务器接口与客户端接口非常容易建立连接,只要在客户端指定WEB服务接口地址即可,避免了使用DCOM接口复杂的接口配置。以前使用我们DCOM接口编程的用户,建议尽快转为Web服务接口编程。

  客户端接口是我们为第三方软件开发的COM编程接口,让你轻松地通过客户端COM接口调用Web服务,避免了你直接调试Web服务的麻烦,你只要用开发工具直接调用或设置客户端COM接口对象的函数或属性即可。你可以使用各种编程开发工具,如:VB、VC、Cbuilder、Delphi、Java、.NET开发工具等。

在使用前你需要先安装Web服务接口和客户端COM接口。

Web服务接口的安装步骤:

 
WinXP安装Web服务接口为例。

   1、在服务器端安装MS SqlServer2000 以及 MS IIS(微软信息服务器),并让之处于运行状态。您也可以在安装Web服务接口后再安装 MS Sql Server2000以及 MS IIS(微软信息服务器)。SqlServer和IIS可以分别安装在两台机器上。    

   2、安装Web服务接口,通过我们提供的下载地址 http://www.kmfangxun.com/download/fxWebSrv.EXE 下载Web服务接口安装程序,下载后运行该安装程序,按提示进行安装即可,并记住你选择的安装目录,比如选择安装在 E:\Program files\fxWebSrv 目录下,在下一步安装信息服务器的虚拟目录时要用到该目录。Web服务接口和IIS必须安装在同一台机器上。

   3、为安装的Web服务接口建立虚拟目录,通过操作系统的  "控制面板--〉管理工具-〉Internet信息服务器",进入信息服务器管理,选择网站的根目录,在网站根目录的右键弹出菜单中选择“新建-〉虚拟目录”进入虚拟目录建立向导,如图二所示:

           图二、建立虚拟目录

然后按提示进行操作,当需要指定虚拟目录的别名时,您可以按您的命名习惯输入一个别名,我们在这输入一个别名: fxWebSrv ,然后点击下一步,虚拟目录建立向导需要您指定别名所代表的实际的路径,我们选择前面安装 Web服务接口时的安装目录,即:E:\Program files\fxWebSrv 目录。然后点击 下一步直到安装完成。如图三所示:

  图三 虚拟目录建立完毕,需要指定虚拟目录 fxWebSrv 的属性如图四           图四  设置虚拟目录 fxWebSrv 的属性
   
      图五    目录安全性设置 点击编辑按钮进入图六           图六 身份验证方法

在图四设置虚拟目录 fxWebSrv 的属性中,选择执行权限为 “脚本和可执行文件”;在图六身份验证方法中,在匿名访问处打钩。这样虚拟目录 fxWebSrv 的属性设置完毕。 有关虚拟目录的创建及属性设置的更为详细的说明请参考有关专业书籍,因为不同的操作系统在设置上会有些区别。

  设置完毕后,服务器端的安装就完成了。

Web服务接口地址

    通过以上3个步骤,Web服务接口的地址(网址)也就确定了,如果IIS 网站的IP地址为:192.168.16.50 ,那么Web服务接口的访问地址就是:http://192.168.16.50/fxWebSrv/fxWebSrv.dll/Soap/IfxJFSoapSrv,其中fxWebSrv 是前面设置的虚拟目录的别名,fxWebSrv.dll是前面第2步安装的web服务程序,/Soap 的含义是要使用http/Soap通讯协议,/IfxJFSoapSrv指定了web服务程序的服务接口。

 

客户端编程接口的安装

   通过我们的网址 http://www.kmfangxun.com/download/fxWebClient.EXE 下载客户端接口的安装程序,安装完成后即可使用开发工具在您的软件中编程调用和设置客户端COM接口对象的函数和属性。在您的软件中集成COM对象提供的功能。

   支持COM开发的工具均可作为客户端的开发工具,如Visual c++,VB,C++Builder,Delphi,Java,PowerBuilder,.NET开发工具等。

  注:客户端接口对象的ProgId是:fxWebQuery.fxClient  。

  在客户端安装目录下的文件:fxWebQuery.tlb 是客户端COM接口的类型库文件。

 

客户端接口对象的属性及函数说明:

目前在客户端接口对象上提供了下列属性和函数:

1、接口属性:WebSrvUrl

    该属性指定服务端提供Web服务的接口地址,调用接口对象的函数前,需要指定该地址,以前面安装的Web服务为列: WebSrvUrl="http://192.168.16.50/fxWebSrv/fxWebSrv.dll/Soap/IfxJFSoapSrv"; 

2、接口函数:SetDBServer(BSTR DBServerName, int LoginStyle,BSTR LoginId, BSTR Password)

   该函数用于在Web服务接口上设置对应的客户端与数据库服务器 MS SqlServer的连接 参数,在您的系统访问Web服务函数前需要调用该函数一次。 Web服务接口会分别保存各个客户端的登录参数

       
DBServerName----SqlServer服务器的名称或IP地址;

        LoginStyle------登录方式( 0--代表 Window验证,1--代表SqlServer方式验证)

         LoginId---------登陆Id,通常为sa
       
         Password--------登录密码

      当登录方式为Window验证时,设置LoginId和Password为空字符。

      注:各个客户端可以使用同一个LoginId ,也可以由数据库管理员分别设置各个客户端的LoginId ,这取决于用户的选择。

3、接口函数:Logout()

    该函数用于注销客户端在Web服务接口上设置的与数据库服务器 MS SqlServer的连接参数,建议在您的系统退出时调用该函数一次。
 

4、接口函数:GetAllPhoneUser(BSTR xmlFileName)

   该函数从Sql Server中查询已设置好的电话用户的分机号码、用户名称、部门,并将查询结果保存在客户端由参数xmlFileName指定的文件上,该文件为 XML UTF8 格式文件,获得该文件后,即可由客户端软件分析、处理该文件里的数据。  

XML文件中字段含义如下
PhoneNum 电话号码
UserName 电话用户
Dept 所属部门


5、接口函数:QueryCallRecord(BSTR PhoneNum, BSTR fromDateTime,BSTR toDateTime, BSTR xmlFileName)

   该函数从Sql Server中查询话单,参数PhoneNum指定电话号码,fromDateTime和toDateTime指定查询的日期时间段,并将查询结果保存在客户端由参数xmlFileName指定的文件上,该文件为 XML UTF8 格式文件,获得该文件后,即可由客户端软件分析、处理该文件里的话单数据。
 

       XML文件话单字段含义如下

PhoneNum

电话号码
UserName

电话用户

Dept 所属部门
Trk 中继号
callNum 被叫号码

callPlace

被叫地点
startDateTime 通话起始日期时间
Duration 通话时长
coefficient 收费系数
callMoney 通话费
callType 通话类型


 

       callType 通话类型说明

callType=0

国际长途
callType=1

国内长途

callType=2 本地网电话
callType=3 IP电话
callType=4 普通市话
callType=5 内线话单
callType=6 外部来话
callType=7 叫醒电话(Morning Call)

 

6、接口函数:QueryUserRecord(BSTR UserName, BSTR fromDateTime,BSTR toDateTime, BSTR xmlFileName)

   该函数从Sql Server中查询话单,参数UserName指定 用户名称,fromDateTime和toDateTime指定查询的日期时间段,并将查询结果保存在客户端由参数xmlFileName指定的文件上,该文件为 XML UTF8 格式文件,获得该文件后,即可由客户端软件分析、处理该文件里的话单数据。
 

7、接口函数:QueryDeptRecord(BSTR Dept,BSTR fromDateTime,BSTR toDateTime,BSTR xmlFileName)

    该函数从Sql Server中查询话单,参数Dept指定 部门名称,fromDateTime和toDateTime指定查询的日期时间段,并将查询结果保存在客户端由参数xmlFileName指定的文件上,该文件为 XML UTF8 格式文件,获得该文件后,即可由客户端软件分析、处理该文件里的话单数据。

8、接口函数:QueryRecord(BSTR fromDateTime,BSTR toDateTime,BSTR xmlFileName)

    该函数从Sql Server中查询所有用户的话单, 参数fromDateTime和toDateTime指定查询的日期时间段,并将查询结果保存在客户端由参数xmlFileName指定的文件上,该文件为 XML UTF8 格式文件,获得该文件后,即可由客户端软件分析、处理该文件里的话单数据。

9、接口函数:GetAllDept( BSTR xmlFileName )

   该函数从Sql Server中查询已设置好的部门列表,并将查询结果保存在客户端由参数xmlFileName指定的文件上,该文件为 XML UTF8 格式文件,获得该文件后,即可由客户端软件分析、处理该文件里的数据。
 

10、接口函数:GetRoomList( BSTR xmlFileName )

   该函数从Sql Server中查询客房中在住房间列表,并将查询结果保存在客户端由参数xmlFileName指定的文件上,该文件为 XML UTF8 格式文件,获得该文件后,即可由客户端软件分析、处理该文件里的数据。

11、接口函数:GetRoomGuest( BSTR RoomNum,BSTR xmlFileName)  

   该函数从Sql Server中查询客房中在住房间号RoomNum的旅客信息,并将查询结果保存在客户端由参数xmlFileName指定的文件上,该文件为 XML UTF8 格式文件,获得该文件后,即可由客户端软件分析、处理该文件里的数据。

   该函数可用于酒店IC卡、房卡、电子们锁等管理系统中,在读写卡时直接读取旅客信息,避免重复录入旅客信息。

12、接口函数:AddGuestCost( BSTR RoomNum,BSTR xfName,BSTR xfDate,double xfMoney,BSTR djYuan)

    该函数用于给在住旅客增加消费信息,RoomNum--旅客房间,xfName--消费名称,xfDate--消费日期,xfMoney--消费金额,djYuan--登记员。

    比如在餐饮管理系统或视频点播系统中,如果有在住旅客发生了消费,那么可以通过该函数将旅客消费信息传送到酒店管理的客房管理系统中,由酒店总台在旅客离店结帐时一并结帐收费。

    参数djYuan是第三方管理系统中的操作员。

13、接口函数:GetCostDetail( BSTR RoomNum,BSTR xmlFileName)

    该函数从Sql Server中查询客房中在住房间RoomNum的旅客消费明细, 并将查询结果保存在客户端由参数xmlFileName指定的文件中,该文件为 XML UTF8 格式文件,获得该文件后,即可由客户端软件分析、处理该文件里的数据。

   该函数可以和函数 AddGuestCost 配合使用,查看 AddGuestCost 函数是否已经将消费信息录入到数据库服务器中。

 

编程举例:

函数 QueryCallRecord 举例:

1、VB举例

   dim objWebSrv as Object
   Set objWebSrv=CreateObject("
fxWebQuery.fxClient")
  
    '设置Web服务地址,参考Web服务接口安装
    objWebSrv.
WebSrvUrl="http://192.168.16.50/fxWebSrv/fxWebSrv.dll/Soap/IfxJFSoapSrv"

   '如果服务端和客户端在同一台机器上,则

   ' objWebSrv.
WebSrvUrl="http://localhost/fxWebSrv/fxWebSrv.dll/Soap/IfxJFSoapSrv"

   '设置客户端在Web服务接口上和SqlServer的连接参数
 
    ServerName="192.168.16.50"
    LogStyle=1
    logId="sa"
    Password="kkk"
   
objWebSrv.SetDBServer(ServerName,LogStyle,logId,Password )

    '按电话号码查询话单  
    PhoneNum="8000"
    fromDateTime="2006-12-02 04:24:31"
    toDateTime  ="2007-03-22 08:24:31"
    xmlFileName="c:\phonecall.xml"
   
objWebSrv.QueryCallRecord( PhoneNum,fromDateTime,toDateTime,xmlFileName ) 


     '上面函数执行完毕后,会得到变量xmlFileName指定的xml文件。下面从XML文件中取数据:

          dim doc as XmlDocument = new XmlDocument();
         
          doc.Load(xmlFileName);

            '取记录集
           dim NodeList as XmlNodeList = doc.GetElementsByTagName("ROW");
           for (int i = 0; i < NodeList.Count; i++)
            {

               dim childNode as XmlNode = NodeList.Item(i);

                ' Create an attribute collection from the node.
               dim attrColl as XmlAttributeCollection  = childNode.Attributes;

              '下面取记录各个字段的值
               PhoneNum      = attrColl["PhoneNum"].Value; ' 电话号码
               UserName      = attrColl["UserName"].Value; ' 电话用户
               Dept          = attrColl["Dept"].Value;     ' 所属部门
               Trk           = attrColl["Trk"].Value;      ' 中继号
               callNum       = attrColl["callNum"].Value;  ' 被叫号码
               callPlace     = attrColl["callPlace"].Value; ' 被叫地点
               startDateTime = attrColl["startDateTime"].Value; '通话起始日期时间
               Duration      = attrColl["Duration"].Value; '通话时长
               coefficient   = attrColl["coefficient"].Value; '收费系数
               callMoney     = Convert.ToDouble( attrColl["callMoney"].Value ); ' 通话费
               callType      = Convert.ToInt16( attrColl["callType"].Value ); '通话类型

               '按您的需要进行处理
               listBox1.Items.Add("PhoneNum:" + PhoneNum);
               listBox1.Items.Add("UserName:" + UserName);
               listBox1.Items.Add("------------------------------------------");

            }//for
 

 


 

2、C++builder 举列:  //注:这种方法也可以用于Delphi

    //加头文件  #include "ComObj.hpp"

   Variant objWebSrv=CreateOleObject("fxWebQuery.fxClient");
  
   //设置Web服务地址,参考Web服务接口安装
   WideString webUrl=
"http://192.168.16.50/fxWebSrv/fxWebSrv.dll/Soap/IfxJFSoapSrv";
   objWebSrv.OlePropertySet("WebSrvUrl",webUrl);

   //如果服务端和客户端在同一台机器上,则
  
//webUrl="http://localhost/fxWebSrv/fxWebSrv.dll/Soap/IfxJFSoapSrv";
   //objWebSrv.OlePropertySet("WebSrvUrl",webUrl);

  
    //设置客户端在Web服务接口上和SqlServer的连接参数
    WideString ServerName="192.168.16.50";
    int LogStyle=1;
    WideString logId="sa";
    WideString Password="kkk";
   
objWebSrv.OleFunction("SetDBServer",ServerName,LogStyle,logId,Password);

   
    //按电话号码查询话单  
    WideString PhoneNum    ="8000";
    WideString fromDateTime="2006-12-02 04:24:31";
    WideString toDateTime  ="2007-03-22 08:24:31";
    WideString xmlFileName ="c:\\phonecall.xml";
   
objWebSrv.OleFunction("QueryCallRecord", PhoneNum,fromDateTime,toDateTime,xmlFileName);
   
    //上面函数执行完毕后,会得到变量xmlFileName指定的xml文件,
    //可以直接用组件TClientDataSet的实例对象来读取该文件直接获取内容,按你的需要处理数据

    if( FileExists(xmlFileName) )
      {
       ClientDataSet1->LoadFromFile(xmlFileName);
       String PhoneNum=ClientDataSet1->FieldByName("PhoneNum")->AsString;
       String UserName=ClientDataSet1->FieldByName("UserName")->AsString;
       //................
       //................

      }



3、MS Visual Studio.NET举例(C#)

    在Visual Studio.NET的C# IDE开发环境中,要调用客户端的COM接口,先点击菜单“Project->Add Reference...”,选择COM选项,然后在Component Name下选择fxWebClient,点击OK按钮,完成后,您的项目中就可以调用客户端的COM接口了。

调用方法见下面:

private void button1_Click(object sender, EventArgs e)
  {
    fxWebQuery.fxClient objWebSrv = new fxWebQuery.fxClient();

   
//设置Web服务地址,参考Web服务接口安装
    objWebSrv.WebSrvUrl = "http://192.168.16.50/fxWebSrv/fxWebSrv.dll/Soap/IfxJFSoapSrv";
    //如果服务端和客户端在同一台机器上,则
    //objWebSrv.WebSrvUrl = "http://localhost/fxWebSrv/fxWebSrv.dll/Soap/IfxJFSoapSrv";

    //设置客户端在Web服务接口上和SqlServer的连接参数
    string ServerName="192.168.16.50";
    int LogStyle=1;
    string logId="sa";
    string Password="kkk";
    objWebSrv.SetDBServer(ServerName,LogStyle,logId,Password);

    //按电话号码查询话单  
    string PhoneNum    ="8000";
    string fromDateTime="2006-12-02 04:24:31";
    string toDateTime  ="2007-03-22 08:24:31";
    string xmlFileName ="c:\\phonecall.xml";

    objWebSrv.QueryCallRecord(PhoneNum,fromDateTime,toDateTime,xmlFileName);

     //上面函数执行完毕后,会得到变量xmlFileName指定的xml文件。 下面从XML文件中取数据:
 

           //记住加上 using System.Xml;

           //声明和文件xmlFileName对应的字段变量
            string PhoneNum; // 电话号码
            string UserName; // 电话用户
            string Dept; // 所属部门
            string Trk; // 中继号
            string callNum; // 被叫号码
            string callPlace; // 被叫地点
            string startDateTime;// 通话起始日期时间
            string Duration; // 通话时长
            string coefficient; // 收费系数
            double callMoney; // 通话费
            int callType; //通话类型


            XmlDocument doc = new XmlDocument();
            doc.Load(xmlFileName);

            //取记录集
            XmlNodeList NodeList = doc.GetElementsByTagName("ROW");
           for (int i = 0; i < NodeList.Count; i++)
            {

               XmlNode childNode = NodeList.Item(i);

                // Create an attribute collection from the node.
               XmlAttributeCollection attrColl = childNode.Attributes;

              //下面取记录各个字段的值
               PhoneNum      = attrColl["PhoneNum"].Value; // 电话号码
               UserName      = attrColl["UserName"].Value; // 电话用户
               Dept          = attrColl["Dept"].Value; // 所属部门
               Trk           = attrColl["Trk"].Value; ; // 中继号
               callNum       = attrColl["callNum"].Value; // 被叫号码
               callPlace     = attrColl["callPlace"].Value; // 被叫地点
               startDateTime = attrColl["startDateTime"].Value; // 通话起始日期时间
               Duration      = attrColl["Duration"].Value; // 通话时长
               coefficient   = attrColl["coefficient"].Value; // 收费系数
               callMoney     = Convert.ToDouble( attrColl["callMoney"].Value ); // 通话费
               callType      = Convert.ToInt16( attrColl["callType"].Value ); //通话类型

               //按您的需要进行处理
               listBox1.Items.Add("PhoneNum:" + PhoneNum);
               listBox1.Items.Add("UserName:" + UserName);
               listBox1.Items.Add("------------------------------------------");

            }//for
 


  }

高级用户编程

     客户端接口安装后,在您使用的开发工具的Type Library列表中,fxWebClient Library 项即为客户端COM接口的Type Library。

     你可以通过开发工具用引入Type Library 的方法来生成相应的类,然后通过接口对象来设置和调用对象的属性和方法,这种方法可以使运行速度相对快一些,具体请参看相关开发工具的有关 COM 编程的资料。在此不再说明。

 

其它说明:

客户端运行时,出现以下提示可能的原因:

            客户端运行时出现的提示  原因
可能的原因有:
1、没有运行IIS。
2、没有设置Web服务接口的虚拟目录。
3、客户端指定的Web服务接口地址不对。
4、客户端在IIS上的权限不够。

注:有的杀毒软件会封锁服务端Http的端口(一般为80端口),这会导致客户端无法访问Web服务端的服务接口,也无法用浏览器浏览IIS的网页。
   
可能的原因有:
1、没有安装客户端COM接口;
2、客户端COM接口没有被注册;