问一个vfp三层架构的问题

crecrecre 2013-04-09 07:40:32
用张洪举老师的"程序设计参考手册"一书的例子做了一个三层的web例子,在本机上运行正常,可将程序放到客户端总是报动态库里的自定义函数出错,不知是什么原因?
在放到客户端时将WSDL后缀的文件地址改为服务器的地址了.
在本机运行正常,如果需要看代码再给大家粘贴.
...全文
1111 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dell_note 2013-05-10
  • 打赏
  • 举报
回复
引用 12 楼 crecrecre 的回复:
请大家帮忙测试一下
关注一下
crecrecre 2013-04-29
  • 打赏
  • 举报
回复
请大家帮忙测试一下
crecrecre 2013-04-24
  • 打赏
  • 举报
回复
引用 10 楼 net_steven 的回复:
另一台电脑上要装SOAP协议支持库吧。
装了,就是传一个字符串它也是不行.
net_steven 2013-04-23
  • 打赏
  • 举报
回复
另一台电脑上要装SOAP协议支持库吧。
crecrecre 2013-04-14
  • 打赏
  • 举报
回复
请大家帮忙看盾这个问题是怎么回事
crecrecre 2013-04-11
  • 打赏
  • 举报
回复
下面是客户端的form1_command1_click事件代码, 在同一台机器上没有问题,就是将这个客户放到另一台电脑就是不能访问了,总是说getcustomerinfo函数不对
crecrecre 2013-04-11
  • 打赏
  • 举报
回复
下面是生成dll的内容(myclass.prg)

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=sa123;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         
下面是客户端的form1_command1_click事件代码, 在同一台机器上没有问题,就是将这个客户放到另一台电脑就是不能访问了,总是说getteachinfo函数不对.

oSoapClient=CREATEOBJECT("MSSOAP.SoapClient30")
oSoapClient.MSSoapInit("http://HC49-XP/FoxWebService/ChangeCustomer.WSDL")
cXML=oSoapClient.GetCustomerInfo()
RELEASE oSoapClient

*ox=NEWOBJECT("mywebservice.ChangeCustomer")
*cXML=ox.GetCustomerInfo()
*RELEASE ox

SET MULTILOCKS ON
IF USED("curCustomer")  &&关闭表
    USE IN curCustomer
ENDIF 

*!* 将XML转换为临时表
oXMLAdapter=CREATEOBJECT("XMLAdapter")
oXMLAdapter.LoadXML(cXML,.F.)
oXMLAdapter.Tables(1).Alias="curCustomer"
oXMLAdapter.Tables(1).ToCursor()
SELECT curCustomer
=CURSORSETPROP("Buffering",5)

*!* 设置表格
WITH Thisform.Grid1
    .RecordSourceType=1
    .RecordSource="curCustomer"
    .ColumnCount=2
    .Columns(1).Header1.Caption="客户编号"
    .Columns(1).ControlSource="curCustomer.CustomerID"
    .Columns(1).Width=80
    .Columns(2).Header1.Caption="公司名称"
    .Columns(2).ControlSource="curCustomer.CompanyName"
    .Columns(2).Width=200    
ENDWITH 
Thisform.Refresh 

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧