转: 用Delphi7 调用.NET 2.0的WebService 所要注意的问题。
来源:互联网 发布:js导出数据到excel 编辑:程序博客网 时间:2024/04/28 09:42
本贴转自: http://www.cnblogs.com/sonicit/archive/2007/06/02/768753.html
用Delphi7 调用.NET 2.0的WebService 所要注意的问题。
Delphi7 调用VS.NET 2005开发的基于.NET 2.0的WebService时发生了错误。查阅资料 http://www.community.borland.com/article/borcon/files/4132/paper/4132.html 发现原来Delphi7客户端虽然支持WebService的RPC|Encoded 和 Document|Literal编码,但 默认的是使用RPC。而.NET 2.0下的WebService却是默认采用Documnet|Literal编码的。因此我们需要显示地声明让Delphi客户端采用Documnet|Literal编码就可以了。在Delphi的WSDL Importer产生了WebService的接口文件中加入如下行:
initialization
InvRegistry.RegisterInterface(TypeInfo(ServiceSoap), 'http://tempuri.org/', 'utf-8');
InvRegistry.RegisterInvokableClass(ServiceSoapImpl);
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(ServiceSoap), 'http://tempuri.org/HelloWorld');
InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument);//指明Delphi采用Document编码
end.
InvRegistry.RegisterInterface(TypeInfo(ServiceSoap), 'http://tempuri.org/', 'utf-8');
InvRegistry.RegisterInvokableClass(ServiceSoapImpl);
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(ServiceSoap), 'http://tempuri.org/HelloWorld');
InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument);//指明Delphi采用Document编码
end.
如果需要在WebService中传送汉字的参数,则建议在Service.pas中再添加一行代码
function GetServiceSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): ServiceSoap;
const
defWSDL = 'http://localhost/myservice/service.asmx?wsdl';
defURL = 'http://localhost/myservice/service.asmx';
defSvc = 'Service';
defPrt = 'ServiceSoap';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
RIO.HTTPWebNode.UseUTF8InHeader := True; //添加该行,指定采用UTF-8代码传输
try
Result := (RIO as ServiceSoap);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
const
defWSDL = 'http://localhost/myservice/service.asmx?wsdl';
defURL = 'http://localhost/myservice/service.asmx';
defSvc = 'Service';
defPrt = 'ServiceSoap';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
RIO.HTTPWebNode.UseUTF8InHeader := True; //添加该行,指定采用UTF-8代码传输
try
Result := (RIO as ServiceSoap);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
需要说明的是使用Delphi2006则不需要上述的改变即可以正确调用VS.NET 2005书写的WebService.
- 转: 用Delphi7 调用.NET 2.0的WebService 所要注意的问题。
- 用Delphi7 调用.NET 2.0的WebService 所要注意的问题
- 用Delphi7访问.NET 2.0的WebService
- Delphi7调用vs.net写的WebService
- Delphi7调用WebService的注意事项
- webservice实现所注意的些问题。
- Delphi7 调用C# .Net 2.0 webService 执行数据更新功能的说明
- delphi7调用.net的webservices
- delphi7调用.net的webservices
- Delphi7调用.NET(C#)WebService
- Delphi7调用.NET(C#)WebService
- Delphi7调用axis2框架的webservice
- php 调用.net的webservice 需要注意的
- Delphi7 的 WebService 与 数据库
- Delphi7 的 WebService 与 数据库
- Delphi7的WebService与数据库
- .net 与 java 互调webservice 时注意的问题
- 使用ASP调用WebService时要注意的问题(修正)
- Javascript 增加、删除表格行
- 指针 插入排序分析(我都晕了)
- 日期推算
- web service
- 作业:病毒式营销
- 转: 用Delphi7 调用.NET 2.0的WebService 所要注意的问题。
- RM和RMVB格式有什么区别?
- KTV室内设计 KTV装修设计 KTV设计图
- 简单介绍一下SNMP4J
- web.py 进阶例程
- 独家:未来五年程序员应当具备的十项技能
- 佛教
- 产品经理与项目经理的区别(信息来自网络,并编辑)
- nt kill