Web Service—超简单(100分)

  • 主题发起人 主题发起人 新手101010
  • 开始时间 开始时间

新手101010

Unregistered / Unconfirmed
GUEST, unregistred user!
我初学Web Service,做了一个程序,但运行时出错,请大家指点
我的制作步骤是
先菜单File->New->Other在WebServices页中选择SOAP Server Application在出现的New SOAP Server Application的对话框中选择Web App Debugger executeable并在Class Name中输入MyWS单击OK,然后定义一个接口,添加一个新的单元(UnitInterface),内容如下
unit UnitInterface;
interface
uses Types, XSBuiltIns;
type
IWSInterface=Interface(IInvokable)
['{0A219E60-AF69-42FC-B2AD-7D6D709AADEB}']
function GetWSMsg:string;stdcall;
end;
implementation
uses
InvokeRegistry;
initialization
InvRegistry.RegisterInterface(TypeInfo(IWSInterface));
end.
在定义一个接口实现类,添加一个新的单元(WSInterfaceClass),内容如下
unit UnitInterfaceClass;
interface
uses
UnitInterface, InvokeRegistry;
type
TMyWS=class(TInterfacedObject,IWSInterface)
public
function GetWSMsg:string;stdcall;
end;
implementation
procedure WSInterfaceFactory(out Obj:TObject);
begin
Obj:=TMyWS.Create;
end;
{ TMyWS }
function TMyWS.GetWSMsg: string;
begin
Result:='This is a message.';  //返回的信息
end;
initialization
InvRegistry.RegisterInvokableClass(TMyWS,@WSInterfaceFactory);
end.
然后保存工程文件为WebServic,运行注册,打开Web App Debugger点Start
客户端调用
新建一个工程文件,在窗体中放入Edit1(显示信息)和Button1(调用方法),并放入HTTPRIO1,并在它的WSDLLocation属性中输入http://localhost:8081/WebService.MyWS/wsdl/IWSInterface(注:我用的是8081端口),并点Service属性选择IWSInterfaceservice,点Port属性选择IWSInterfacePort。然后把Web Service的UnitInterface单元添加到该工程文件中,并添加到Unti1中,并在Button的单击事件中写入Edit1.Text:=(HTTPRIP1 as IWSInterface).GetWSMsg;运行,当第一次单击按钮是就会死机,当第二次单击时就会出现“Access violation at address 004037E2 in module ‘WebService.exe’.Read of address 00DFC018.”(我已经打开了Web App Debugger,当点按钮时,WebServie.exe也会自动运行),看错误应该是Web Service服务器的错误,但我找不出来原因,请大家帮帮,告诉我为什么会出现这种原因
请高人指点呀
我的系统是Win2000 Pro+D7
 
initialization
InvRegistry.RegisterInvokableClass(TMyWS,@WSInterfaceFactory);
end.
改成
initialization
InvRegistry.RegisterInvokableClass(TMyWS,WSInterfaceFactory);
end.
如果不能解决请继续留言!

 
也不行的
请高手指点呀
 
那就把type
TMyWS=class(TInterfacedObject,IWSInterface)
public
function GetWSMsg:string;stdcall;
end;
implementation
procedure WSInterfaceFactory(out Obj:TObject);
begin
Obj:=TMyWS.Create;
end;
{ TMyWS }
function TMyWS.GetWSMsg: string;
begin
Result:='This is a message.';  //返回的信息
end;
initialization
InvRegistry.RegisterInvokableClass(TMyWS,@WSInterfaceFactory);
end.
改成
type
TMyWS=class(TInvokableClass,IWSInterface)
public
function GetWSMsg:string;stdcall;
end;
implementation
{ TMyWS }
function TMyWS.GetWSMsg: string;
begin
Result:='This is a message.';  //返回的信息
end;
initialization
InvRegistry.RegisterInvokableClass(TMyWS);
end.
 
我试了,但不行,说类没有注册
大家能告诉我吗?
 
你把类型改成CGI应该没问题了
 
可是我想用这种方法实现呀,一种方法代表不同的技术呀
 
这好像与Delphi有关。我的机子也出过这种问题。它自己有些不稳定出问题这个是没办法的。
 
还有没有高人能指点一下呀
 
后退
顶部