主题:[转帖]学网络的要看一下!张老师的WEB服务
在Visual FoxPro中创建Web服务
注:该文章节选自作者的《Visual FoxPro程序设计参考手册》
创建一个Web服务是一个复杂的过程,这涉及到要使用Internet信息服务(IIS)、Visual FoxPro COM服务程序和简单对象访问协议(SOAP)。在这节中将结合上节中介绍的XMLAdapter和在20.4节中介绍的CursorAdapter来建立一个可以通过HTTP进行获取和修改SQL Server 2000附带示例数据库Northwind中Customers表的Web服务实例。该Web服务的流程图18-11所示。可以看出,这是一个3层架构的客户/服务器模式。
图18-11 Web服务流程图
18.4.1 建立COM服务程序
创建Web服务,首先要建立一个COM服务程序,然后才可以使用Visual FoxPro的Web服务发布向导将COM升迁为Web服务。
1.建立项目和类
新建一个名为MyWebService的项目,然后在项目中使用以下代码创建一个叫做MyClass的.prg文件,在其中建立了一个ChangeCustomer类。
DEFINE CLASS ChangeCustomer AS Session OLEPUBLIC
DataSession=2 &&私有数据工作期
PROCEDURE Init
SET MULTILOCKS ON
ENDPROC
PROCEDURE GetCustomerInfo HelpString "获取客户信息"
LOCAL oXMLAdapter AS XMLAdapter,oCA AS String,cXML AS String
oCA=CREATEOBJECT("MyCursorAdapter") &&建立CursorAdapter对象
oCA.CursorFill() &&按oCA的Alias属性指定的名称生成临时表
oXMLAdapter=NEWOBJECT("XMLAdapter") &&建立XMLAdapter
oXMLAdapter.AddTableSchema(oCA.Alias) &&加载临时表到XMLAdapter对象
oXMLAdapter.ToXML("cXML") &&生成XML字符串
RELEASE oXMLAdapter,oCA &&释放对象实例
RETURN cXML &&返回XML字符串
ENDPROC
PROCEDURE UpdateCustomer(cXML AS String) HelpString "更新客户信息"
LOCAL oXMLAdapter AS XMLAdapter,oCA AS CursorAdapter
oXMLAdapter=NEWOBJECT("XMLAdapter") &&建立XMLAdapter
oXMLAdapter.UTF8Encoded=.F.
oXMLAdapter.IsDiffGram=.T.
oXMLAdapter.LoadXML(cXML,.F.) &&加载XML
oCA=CREATEOBJECT("MyCursorAdapter")
oXMLAdapter.Tables(1).ChangesToCursor(oCA.Alias) &&还原缓冲表
oCA.CursorAttach(oCA.Alias) &&将还原出的缓冲表与CursorAdapter建立关联
=TABLEUPDATE(.T.) &&发送更新
RELEASE oXMLAdapter,oCA
ENDPROC
PROCEDURE Error(nError AS Integer,cMethod AS String,nLine AS Integer)
LOCAL cText AS String
cText=cMethod+" 错误号="+LTRIM(STR(nError,5))+" 行号="+LTRIM(STR(nLine,8))+" "+MESSAGE()
COMRETURNERROR(cText,_VFP.ServerName)
ENDPROC
ENDDEFINE
*!* 建立基于CursorAdapter的子类,用于连接到SQL Server
DEFINE CLASS MyCursorAdapter AS CursorAdapter
Alias="Customer"
BreakOnError= .F.
DataSourceType="ODBC"
Tables="Customers"
SendUpdates=.T.
AllowDelete=.T.
AllowInsert=.T.
AllowUpdate=.T.
UpdateType=1 &&发送更新方式为UPDATE
WhereType=1 &&Where子句类型为仅由KeyFieldList属性指定的主关键字段组成
KeyFieldList="CustomerID"
UpdatableFieldList="CustomerID, CompanyName"
UpdateNameList="CustomerID Customers.CustomerID, CompanyName Customers.CompanyName"
BufferModeOverride= 5 &&开放式表缓存
cConnectionString="Driver={SQL Server};Server=localhost;Uid=sa;Pwd=;Database=northwind"
PROCEDURE Init &&类实例化时直接建立连接
This.DataSource=SQLSTRINGCONNECT(This.cConnectionString, .T.)
This.SelectCmd="SELECT CustomerID, CompanyName FROM Customers"
This.CursorSchema ="CustomerID C(5), CompanyName C(40)"
ENDPROC
FUNCTION Destroy() &&在释放对象时断开与SQL Server的连接
SQLDISCONNECT(This.DataSource)
ENDFUNC
ENDDEFINE
上面代码中的GetCustomerInfo( )方法用于将Customers的CustomerID和CompanyName字段中的所有内容以XML格式返回给客户端;UpdateCustomer( )方法根据客户端发送来的Diffgrams格式的XML更新到Customers表。
2.编译项目为COM服务程序
在17.4.2节中详细介绍了编译COM对象的方法与原理,因此这里只简单介绍步骤。在正式编译前,需要预编译一下自动服务程序,才可以设置自动服务程序的项目信息。单击项目管理器的Build(编译)命令按钮,打开Build Options(编译选项)对话框,选择Multi-threaded COM server(多线程COM服务程序)选项进行连遍,编译成功后,该COM组件自动在本地计算机的Windows中注册并可用。
在项目管理器上单击鼠标右键,在弹出的快捷菜单上选择Project Info(项目信息)菜单项,打开如图18-12所示Project Information对话框,在Servers选项卡的Instancing(实例)下拉列表中选择服务类型为Multi Use(多重使用)。
单击项目管理器中的Build按钮重新连编项目为Multi-threaded COM server。
18.4.2 安装并配置Internet信息服务(IIS)
要在服务器上发布Web服务,需要IIS的支持。IIS在Windows XP中是作为可选组件提供的,可以在Windows的控制面板中双击“添加或删除程序”图标打开“Windows组件向导”对话框,在组件列表中复选“Internet信息服务(IIS)”组件,并单击“下一步”按钮进行安装,如图18-13所示。安装成功后,可以打开Internet Explorer浏览器,在地址栏中输入“http://127.0.0.1”,可打开默认的站点页面。
图18-12 设置服务类型
图18-13 添加IIS组件
在安装好IIS后,应该为要发布的Web服务建立一个虚拟目录,以方便调用,步骤如下:
(1)在控制面板中双击“管理工具”图标,打开“管理工具”窗口。
(2)在“管理工具”窗口中双击“Internet信息服务”图标,打开“Internet信息服务”窗口,如图18-14所示。
(3)在“默认站点”节点上单击鼠标右键,在出现的快捷菜单中,选择“新建”菜单项下的“虚拟目录”选项,打开“虚拟目录创建向导”对话框,如图18-15所示。
(4)单击“下一步”按钮,在出现的如图18-16所示的“别名”文本框中为虚拟目录指定一个名称“FoxWebService”,通过该名称可以引用一个硬盘上的实际物理目录。
(5)单击“下一步”按钮,在出现的如图18-17所示的“目录”文本框中指定一个存放Web服务内容的实际物理目录。
(6)单击“下一步”按钮,将出现如图18-18所示的设置目录权限画面,如图设置后,单击“下一步”按钮,在出现的画面中单击“完成”按钮,虚拟目录将被成功创建到“默认网站”节点中,如图18-19所示。
图18-14 “Internet信息服务”窗口
图18-15 “虚拟目录创建向导”对话框
图18-16 建立虚拟目录别名
图18-17 设置物理目录
图18-18 设置目录权限
图18-19 虚拟目录添加完成后
注:该文章节选自作者的《Visual FoxPro程序设计参考手册》
创建一个Web服务是一个复杂的过程,这涉及到要使用Internet信息服务(IIS)、Visual FoxPro COM服务程序和简单对象访问协议(SOAP)。在这节中将结合上节中介绍的XMLAdapter和在20.4节中介绍的CursorAdapter来建立一个可以通过HTTP进行获取和修改SQL Server 2000附带示例数据库Northwind中Customers表的Web服务实例。该Web服务的流程图18-11所示。可以看出,这是一个3层架构的客户/服务器模式。
图18-11 Web服务流程图
18.4.1 建立COM服务程序
创建Web服务,首先要建立一个COM服务程序,然后才可以使用Visual FoxPro的Web服务发布向导将COM升迁为Web服务。
1.建立项目和类
新建一个名为MyWebService的项目,然后在项目中使用以下代码创建一个叫做MyClass的.prg文件,在其中建立了一个ChangeCustomer类。
DEFINE CLASS ChangeCustomer AS Session OLEPUBLIC
DataSession=2 &&私有数据工作期
PROCEDURE Init
SET MULTILOCKS ON
ENDPROC
PROCEDURE GetCustomerInfo HelpString "获取客户信息"
LOCAL oXMLAdapter AS XMLAdapter,oCA AS String,cXML AS String
oCA=CREATEOBJECT("MyCursorAdapter") &&建立CursorAdapter对象
oCA.CursorFill() &&按oCA的Alias属性指定的名称生成临时表
oXMLAdapter=NEWOBJECT("XMLAdapter") &&建立XMLAdapter
oXMLAdapter.AddTableSchema(oCA.Alias) &&加载临时表到XMLAdapter对象
oXMLAdapter.ToXML("cXML") &&生成XML字符串
RELEASE oXMLAdapter,oCA &&释放对象实例
RETURN cXML &&返回XML字符串
ENDPROC
PROCEDURE UpdateCustomer(cXML AS String) HelpString "更新客户信息"
LOCAL oXMLAdapter AS XMLAdapter,oCA AS CursorAdapter
oXMLAdapter=NEWOBJECT("XMLAdapter") &&建立XMLAdapter
oXMLAdapter.UTF8Encoded=.F.
oXMLAdapter.IsDiffGram=.T.
oXMLAdapter.LoadXML(cXML,.F.) &&加载XML
oCA=CREATEOBJECT("MyCursorAdapter")
oXMLAdapter.Tables(1).ChangesToCursor(oCA.Alias) &&还原缓冲表
oCA.CursorAttach(oCA.Alias) &&将还原出的缓冲表与CursorAdapter建立关联
=TABLEUPDATE(.T.) &&发送更新
RELEASE oXMLAdapter,oCA
ENDPROC
PROCEDURE Error(nError AS Integer,cMethod AS String,nLine AS Integer)
LOCAL cText AS String
cText=cMethod+" 错误号="+LTRIM(STR(nError,5))+" 行号="+LTRIM(STR(nLine,8))+" "+MESSAGE()
COMRETURNERROR(cText,_VFP.ServerName)
ENDPROC
ENDDEFINE
*!* 建立基于CursorAdapter的子类,用于连接到SQL Server
DEFINE CLASS MyCursorAdapter AS CursorAdapter
Alias="Customer"
BreakOnError= .F.
DataSourceType="ODBC"
Tables="Customers"
SendUpdates=.T.
AllowDelete=.T.
AllowInsert=.T.
AllowUpdate=.T.
UpdateType=1 &&发送更新方式为UPDATE
WhereType=1 &&Where子句类型为仅由KeyFieldList属性指定的主关键字段组成
KeyFieldList="CustomerID"
UpdatableFieldList="CustomerID, CompanyName"
UpdateNameList="CustomerID Customers.CustomerID, CompanyName Customers.CompanyName"
BufferModeOverride= 5 &&开放式表缓存
cConnectionString="Driver={SQL Server};Server=localhost;Uid=sa;Pwd=;Database=northwind"
PROCEDURE Init &&类实例化时直接建立连接
This.DataSource=SQLSTRINGCONNECT(This.cConnectionString, .T.)
This.SelectCmd="SELECT CustomerID, CompanyName FROM Customers"
This.CursorSchema ="CustomerID C(5), CompanyName C(40)"
ENDPROC
FUNCTION Destroy() &&在释放对象时断开与SQL Server的连接
SQLDISCONNECT(This.DataSource)
ENDFUNC
ENDDEFINE
上面代码中的GetCustomerInfo( )方法用于将Customers的CustomerID和CompanyName字段中的所有内容以XML格式返回给客户端;UpdateCustomer( )方法根据客户端发送来的Diffgrams格式的XML更新到Customers表。
2.编译项目为COM服务程序
在17.4.2节中详细介绍了编译COM对象的方法与原理,因此这里只简单介绍步骤。在正式编译前,需要预编译一下自动服务程序,才可以设置自动服务程序的项目信息。单击项目管理器的Build(编译)命令按钮,打开Build Options(编译选项)对话框,选择Multi-threaded COM server(多线程COM服务程序)选项进行连遍,编译成功后,该COM组件自动在本地计算机的Windows中注册并可用。
在项目管理器上单击鼠标右键,在弹出的快捷菜单上选择Project Info(项目信息)菜单项,打开如图18-12所示Project Information对话框,在Servers选项卡的Instancing(实例)下拉列表中选择服务类型为Multi Use(多重使用)。
单击项目管理器中的Build按钮重新连编项目为Multi-threaded COM server。
18.4.2 安装并配置Internet信息服务(IIS)
要在服务器上发布Web服务,需要IIS的支持。IIS在Windows XP中是作为可选组件提供的,可以在Windows的控制面板中双击“添加或删除程序”图标打开“Windows组件向导”对话框,在组件列表中复选“Internet信息服务(IIS)”组件,并单击“下一步”按钮进行安装,如图18-13所示。安装成功后,可以打开Internet Explorer浏览器,在地址栏中输入“http://127.0.0.1”,可打开默认的站点页面。
图18-12 设置服务类型
图18-13 添加IIS组件
在安装好IIS后,应该为要发布的Web服务建立一个虚拟目录,以方便调用,步骤如下:
(1)在控制面板中双击“管理工具”图标,打开“管理工具”窗口。
(2)在“管理工具”窗口中双击“Internet信息服务”图标,打开“Internet信息服务”窗口,如图18-14所示。
(3)在“默认站点”节点上单击鼠标右键,在出现的快捷菜单中,选择“新建”菜单项下的“虚拟目录”选项,打开“虚拟目录创建向导”对话框,如图18-15所示。
(4)单击“下一步”按钮,在出现的如图18-16所示的“别名”文本框中为虚拟目录指定一个名称“FoxWebService”,通过该名称可以引用一个硬盘上的实际物理目录。
(5)单击“下一步”按钮,在出现的如图18-17所示的“目录”文本框中指定一个存放Web服务内容的实际物理目录。
(6)单击“下一步”按钮,将出现如图18-18所示的设置目录权限画面,如图设置后,单击“下一步”按钮,在出现的画面中单击“完成”按钮,虚拟目录将被成功创建到“默认网站”节点中,如图18-19所示。
图18-14 “Internet信息服务”窗口
图18-15 “虚拟目录创建向导”对话框
图18-16 建立虚拟目录别名
图18-17 设置物理目录
图18-18 设置目录权限
图18-19 虚拟目录添加完成后