3层数据库开发中,无法通过SoapConnection获得服务器端的DataSetProvider名称。请问如何解决?(100分)

A

agwn

Unregistered / Unconfirmed
GUEST, unregistred user!

在服务器端,建立了一个WebService,并且加入了一个DataModule(定义名称为:DataAccessMod)。在DataAccessMod中加入了ADOConnection,ADOQuery和DataSetProvider。运行后注册服务,可以用IE正常看到已经注册了IDataAccessMod接口。
然后建立客户端程序:加入SOAPConnection,设置URL指向IDataSrv接口。然后加入ClientDataSet,选择RemoteSrv为SOAPConnection。但是在ProviderName中无法看到服务器端的DataProvider名称。
观察Web App Debugger中的请求与响应。发现
请求为:
POST /DataSrv.DataSrv/soap/IDataAccessMod HTTP/1.1
Accept: text/xml
SOAPAction: "http://www.borland.com/namespaces/Types-IAppServerSOAP"
Content-Type: text/xml
User-Agent: Borland SOAP 1.1
Host: localhost:9999
Content-Length: 456
Connection: Keep-Alive
Cookie: LastProgID=GetData.GetData
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><NS1:SAS_GetProviderNames xmlns:NS1="http://www.borland.com/namespaces/Types"/></SOAP-ENV:Body></SOAP-ENV:Envelope>

响应为:
HTTP/1.1 500 Internal Server Error
Content-Type: text/xml
Content-Length: 428
Content:
<?xml version="1.0" encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ><SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Server</faultcode><faultstring>No invokable class registered that implements interface SOAPMidas.IAppServerSOAP of (soap action/path) "http://www.borland.com/namespaces/Types-IAppServerSOAP"</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>

不知道为什么会提示我没有可以调用的接口?我在IE中的确看到了IDataAccessMod接口呀(如下所示)?
IDataAccessMod [WSDL]
AS_ApplyUpdates
AS_GetRecords
AS_DataRequest
AS_GetProviderNames
AS_GetParams
AS_RowRequest
AS_Execute
另外,SOAPMidas.IAppServerSOAP到底是个什么东西?
[?]
 
哈哈哈~~ 原来是DELPHI SP2的一个BUG,
主要是由于DataModule的向导产生的接口是从IAppServer派生出来的,只要改成从IAppServerSOAP派生出来就可以了。
 
什么地方有DELPHI SP2下载的蛾
 
確實如此,sp2的bug
 
TO agwn:
我也是那个问题,不过我的Delphi 6还没有将 SP2
 但找不到你所说的IAppServerSOAP啊,怎么从IAppServerSOAP派生啊?
请教了,我按李维的例子来做。和你上面的一样。就是不出来。
  请教有那些操作步骤啊?怎么将 Web Service 发布,怎么调? 仅是接口问题?
 
推荐一篇文章CSDN上的
http://www.csdn.net/develop/Read_Article.asp?Id=13488
 
CSDN上的文章我看过了,但问题好象不是这样的,在服务端我用BDE没有问题,但只要放入一个
DBEXPRESS组件,在客户端就看不到任何DataSetProvider了,ADO我没有试过。
 
把DataModule中的IAppServer改为IAppServerSOAP重新编译,试试
 
非常感谢各位,我搞了一天都不知道问题出在哪里,重装了好多次DELPHI 6,现在终于可以了,再谢谢!!![:D]
 
我也按上你们磨拳擦掌方法做了啊。也能看到接口了!
但我的客户端怎么就是找不到DataSetProvider接口啊,是不是还有什么设置的啊?
 
同意agwn
 
困绕我一个下午,希望能成功
 
我怎么还是不行啊
我受不了了
 
ype
IDMDB0610 = interface(IAppServerSOAP)
['{CCB5C12B-2DDD-4C4C-90A3-4E2665679AA7}']
end;

TDMDB0610 = class(TSoapDataModule, IDMDB0610, IAppServerSOAP)
Database1: TDatabase;
animals: TQuery;
dspanimals: TDataSetProvider;
private
这样终于成功了!!!!!
 
各位FW,那文章是我写的,是不是可以给我分啊?(脸皮有点厚的说)^_^
另回:superhippo,BDE/ADO/dbExpress应该都可以,我今天还有dbExpress做了一个ISAPI的WebService
 
崇拜禽兽中......
不过这个BUG李维的书上也提过,不过说的解决办法是关掉DELPHI6,然后重新开启就OK了,不过我的还是不行
 
我也遇到此问题,把SOAPCONNECTION的usesoapadapter设成FALSE就解决了
 
usesoapadapter设成FALSE仅用于当服务端是用D6未打UPD2写的才管用,如果服务端是D6+UPD2
这招不行的.
 
TO:猛禽
不见得吧,我的D6是打了补丁2的。
[usesoapadapter设成FALSE仅用于当服务端是用D6未打UPD2写的才管用,如果服务端是D6+UPD2
这招不行的.]
 
不过还有个问题
虽然将接口是从IAppServer改成从IAppServerSOAP可以了。但在客户端clientdateset中看不到任何DataSetProvider了
用起来非常不方便
另外,请教楼上各位人兄,那个知道服务器分发时要怎样设置?客户端若使用SoapConnection1时URL怎样设置?
一个初哥 Hj-andy@163.com
 
顶部