Delphi 调用.NET(C#) Web Service

delphi下和.net参数传递 该文档实现DELPHI和.Net参数传递 立即下载

 

Delphi调用.NET的WebService,是非常容易和方便的,下面用C#提供的

Login服务 ,来说明Delphi的调用方法.Login返回的是一个字符串.

一般有以下布骤:

A.调用第一步,完成C#,asmx文件生的调用函数

  1. unit UnitMJWebLogin;

  2. interface  

  3. uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;
  4.   
  5. type   
  6.    // Namespace : http://tempuri.org/ 
  7.    // soapAction: http://tempuri.org/%operationName%
  8.    // transport : http://schemas.xmlsoap.org/soap/http  
  9.    // style      : document   
  10.    // binding    : MJLoginSoap 
  11.    // service    : MJLogin   
  12.    // port       : MJLoginSoap   
  13.    // URL        : http://127.0.0.1/EPlatform/bin/MJLogin/MJLogin.asmx 
  14.    // ************************************************************************ //   
  15.    IMJWebLogin = interface (IInvokable)   
  16.    [ '{EEAFD61D-DA43-1CB6-C349-E5DD8110DE17}' ]  
  17.     function    Login( const aLoginName: WideString; const aPassword: WideString; const aCPUID: WideString; const aHardDiskID: WideString): string ; stdcall;  
  18. {根据ASMX生成的函数}   
  19.    end ;   
  20. function GetMJLoginSoap(UseWSDL: Boolean=System . False; Addr: string = '' ; HTTPRIO: THTTPRIO = nil ): IMJWebLogin;

  21. implementation   
  22.   
  23. uses   
  24.     UnitCommon ;   

  25. function GetMJLoginSoap(UseWSDL: Boolean; Addr: string ; HTTPRIO: THTTPRIO): IMJWebLogin;   
  26.   
  27. const   
  28.    defWSDL = 'http://127.0.0.1/EPlatform/wsdl/Login.wsdl' ;   
  29.    defURL   = 'http://127.0.0.1/EPlatform/MJLogin/MJLogin.asmx' ;   
  30.    defSvc   = 'MJLogin' ;   
  31.    defPrt   = 'MJLoginSoap' ;   
  32.   
  33. var   
  34.    RIO: THTTPRIO;   
  35.   
  36. begin   
  37.    Result := nil ;  
  38.    if (Addr = '' ) then   
  39.    begin   
  40.      if UseWSDL then   
  41.        Addr := defWSDL   
  42.      else   
  43.        Addr := defURL;   
  44.    end ;   
  45.   
  46.    if HTTPRIO = nil then   
  47.      RIO := THTTPRIO . Create( nil )  
  48.    else   
  49.      RIO := HTTPRIO;   
  50.    try   
  51.      Result := (RIO as IMJWebLogin);  
  52.      if UseWSDL then   
  53.      begin   
  54.        RIO . WSDLLocation := Addr;  
  55.        RIO . Service := defSvc;   
  56.        RIO . Port := defPrt;  
  57.      end else   
  58.        RIO . URL := Addr;   
  59.    finally   
  60.      if (Result = nil ) and (HTTPRIO = nil ) then   
  61.        RIO . Free;   
  62.    end ;   
  63. end ;   
  64.   
  65.   
  66.   
  67.   
  68.   
  69. initialization   
  70.    InvRegistry . RegisterInterface(TypeInfo(IMJWebLogin), 'http://tempuri.org/' , 'GB2312' );   
  71.    InvRegistry . RegisterDefaultSOAPAction(TypeInfo(IMJWebLogin), 'http://tempuri.org/%operationName%' );   
  72.    InvRegistry . RegisterInvokeOptions(TypeInfo(IMJWebLogin), ioDocument);   
  73. end .   

unit UnitMJWebLogin; interface uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns; type // Namespace : http://tempuri.org/ // soapAction: http://tempuri.org/%operationName% // transport : http://schemas.xmlsoap.org/soap/http // style : document // binding : MJLoginSoap // service : MJLogin // port : MJLoginSoap // URL : http://127.0.0.1/EPlatform/bin/MJLogin/MJLogin.asmx // ************************************************************************ // IMJWebLogin = interface(IInvokable) ['{EEAFD61D-DA43-1CB6-C349-E5DD8110DE17}'] function Login(const aLoginName: WideString; const aPassword: WideString; const aCPUID: WideString; const aHardDiskID: WideString): string; stdcall; {根据ASMX生成的函数} end; function GetMJLoginSoap(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IMJWebLogin; implementation uses UnitCommon ; function GetMJLoginSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IMJWebLogin; const defWSDL = 'http://127.0.0.1/EPlatform/wsdl/Login.wsdl'; defURL = 'http://127.0.0.1/EPlatform/MJLogin/MJLogin.asmx'; defSvc = 'MJLogin'; defPrt = 'MJLoginSoap'; 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; try Result := (RIO as IMJWebLogin); 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; initialization InvRegistry.RegisterInterface(TypeInfo(IMJWebLogin), 'http://tempuri.org/', 'GB2312'); InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IMJWebLogin), 'http://tempuri.org/%operationName%'); InvRegistry.RegisterInvokeOptions(TypeInfo(IMJWebLogin), ioDocument); end.

B.调用ASMX,定位WSDL文件位置

  1. procedure TFrm_Login . SetSoapConnection;   
  2. begin   
  3. self . HTTPRIO_Login . WSDLLocation := 'HTTP://127.0.0.1/EPlatform/wsdl/Login.wsdl' ;   
  4. end ;  

procedure TFrm_Login.SetSoapConnection; begin self.HTTPRIO_Login.WSDLLocation := 'HTTP://127.0.0.1/EPlatform/wsdl/Login.wsdl'; end;

C.调用第三步,完成登录事件的编写

  1. procedure TFrm_Login . Btn_SureClick(Sender: TObject);   
  2. var   
  3.    HttpCallResult : string ;   
  4. begin   
  5.    self . SetSoapConnection;   
  6.    try   
  7.    HttpCallResult :=   
  8.     (self . HTTPRIO_Login as IMJWebLogin).Login(Trim(self . ComboBox_LoginName . Text),   
  9.                                                Trim(self . Edit_Password . Text),   
  10.                                                Trim(self . FUser . FCPUID),Trim(self . FUser . FHardDiskID)) ;   
  11.    except   
  12.      showmessage( '目前服务器忙,请稍候连接服务器' );   
  13.      exit ;   
  14.    end    ;   
  15.    if HttpCallResult= '密码错误' then begin   
  16.       showmessage (HttpCallResult);   
  17.       self . Edit_Password . SelectAll;   
  18.       self . Edit_Password . SetFocus;   
  19.       exit;   
  20.    end ;   
  21. end ;  

procedure TFrm_Login.Btn_SureClick(Sender: TObject); var HttpCallResult : string ; begin self.SetSoapConnection; try HttpCallResult := (self.HTTPRIO_Login as IMJWebLogin).Login(Trim(self.ComboBox_LoginName.Text), Trim(self.Edit_Password.Text), Trim(self.FUser.FCPUID),Trim(self.FUser.FHardDiskID)) ; except showmessage('目前服务器忙,请稍候连接服务器'); exit ; end ; if HttpCallResult='密码错误' then begin showmessage (HttpCallResult); self.Edit_Password.SelectAll; self.Edit_Password.SetFocus; exit; end ; end;

D.注意SOAP控件的设置

SOAP

USEUTF8要设为TRUE,否则为乱码。

完成以上步骤,WebService就可以调用成功了.对于复杂的数据要结合XmlDocument一起使用.

MATLAB实战:手把手教你实现Gardner环路位同步(附完整代码) 本文通过MATLAB实战,详细讲解了Gardner环路位同步算法的原理与实现。内容涵盖插值滤波器、定时误差检测、环路滤波器与数控振荡器等核心模块,并提供完整代码和调试技巧,帮助读者掌握数字通信中关键的符号定时同步技术。 阅读详情

相关推荐

6.5 构网型储能系统的协同控制策略

本文系统阐述了构网型储能系统的协同控制策略,重点分析了多机组群协同运行面临的功率分配不均、动态响应失配等挑战。研究提出了改进型下垂控制与虚拟阻抗法、基于一致性算法的分布式协同控制等解决方案,探讨了构网型储能与同步发电机在惯性响应、一次调频等方面的协同机制,以及与跟网型电源在电压支撑、阻抗重塑等方面的互补作用。文章构建了分层控制架构,为实现多类型电源的全局优化运行提供了技术路径,对提升高比例新能源电力系统的稳定性具有重要意义。

技术工作者 1001

Delphi中调用.net dll

1、开发.net dll,然后再项目属性中设置com可见属性为true; 2、生成的dll使用.net的regasm命令进行注册; 3、为了便于在delphi中对相关方法使用,主要是:传递对象变量到一个dll函数中,以及接收dll返回的对象,在第2步注册的时候增加/tlb参数,生成dll的tlb文件,在delphi 中增加这个类型库应用,如下图: 这里有几点要注意: 对于要进行交互的对象在定义的时候,在.net中使用struct(C#)来定义,而不要使用类,否则在生成delphi 类型库的时

jzt_designer的专栏 1285

CVE-2017-7921漏洞深度剖析:从身份验证绕过到实战复现与防御

身份验证是Web应用安全的核心防线,其逻辑缺陷可能导致严重的未授权访问。身份验证绕过漏洞的原理在于,应用程序对特定请求路径或API接口的访问控制策略存在疏漏,未能执行有效的会话或令牌校验。这类漏洞的技术价值在于,攻击者无需凭证即可直接访问受保护的后端资源,从而获取敏感信息或执行未授权操作,对系统机密性、完整性构成直接威胁。在物联网和安防监控领域,大量网络摄像头、录像机等设备暴露于公网,其Web管理界面便成为常见攻击面。本文聚焦于安防设备中一个经典的CVE-2017-7921身份验证绕过漏洞,通过剖析其技术原

WGH100817的博客 469

delphi如何调用.NET webservice

假设您已经在.net上建立了自己的webservice,目前只是想在delphi上实现对net上自己的webservice 接口的调用 1) 在你的工程中 new -> other 选择 webservices 这页 2) 选择其中的 wsdl importer 项 3) 在其中的wsdl source中填入你已经知道的wdsl地址,这里我填入我的地...

weixin_30457065的博客 179

ZYNQ软件复位重启、程序跳转的实现方法(Multiboot)

目录一、增加FSBL的调试信息 一、增加FSBL的调试信息 启动过程的调试信息如下: Xilinx First Stage Boot Loader Release 2016.4 Jan 19 2020-10:35:00 Devcfg driver initialized Silicon Version 3.1 Boot mode is QSPI Single Flash Informat...

weixin_41922484的博客 2万+

初级文章【西门子】字符拼接成字符串

针对S7-400极其以下PLC,1200往上据说有专门的块了呢,首先,我是不用库的,需要什么函数会自己写,OK进入正题。 首先,我们有一个DB块,里面有14个char,一个14位的char数组和一个14位的string。如下图。 我们的目的是将char1-char10拼接成一个string。 第一种方式:第一步,将char放进数组。 ​​​​​​​ 相信大家都能看明白,但是我还是要解释解释 L取值2 T赋值到临时变量DBNO(INT) OPN DB [#DBNO]获取DB块,这一句.

NS_Speak(IVAV) 1万+

delphi调用C# webservice

delphi调用C# webservice ,使用导入的wsdl 需要在 pas 里最后加上一句话: InvRegistry.RegisterInvokeOptions(TypeInfo(HospitalServiceSoap),ioDocument); 不加的话导致 入参对方不识别。

雨Winning 375

vivado生成及调用自定义IP的方法

开发环境:vivado 2018.2 1.将整个工程封装为自定义IP 将整个工程封装为自定义IP主要有以下步骤: 步骤1.选中工程中的top模块。点击Tools ------> Create and Package New IP,如图1所示 图1 步骤2.弹出界面后,点击next至图2界面,选择Package your current project,然后继续点击next 图2 步骤3.选择生成的IP路径,如图3所示。这个路径就是后续添加该IP的路径 图3 步骤4.继续点击next,然后选择fi

进击的阿日比 4730

菜鸟的springcloud学习总结(四):服务降级

菜鸟的springcloud学习总结(四):服务降级说明一、服务降级 说明 更新时间:2020/9/28 00:13,更新到了OpenFeign 本文主要对springcloud中的服务调用进行学习与记录,主要偏向于实战,本文会持续更新,不断地扩充 本文仅为记录学习轨迹,如有侵权,联系删除 一、服务降级 现在进行到了服务降级这一块,这一块有一些基本的概念需要了解 服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C有调用其他的微服务,这就是所谓的”扇出”,如扇出的链路

最强菜鸟 1323

【SerDes】美信GMSL2-CSI调试心得

美信GMSL2加解串器芯片家族广泛应用于车载和工业视觉系统。文章介绍了MAX96717/MAX96717F加串器和MAX96724/MAX96724R解串器的关键特性,包括支持MIPI CSI-2接口、6Gbps传输速率等功能。提供了基于高通平台的demo系统配置和调试步骤,重点阐述了Link Lock、PCLK检测和Video Lock等关键调试环节,并详细说明了像素模式,隧道模式的工作原理及寄存器配置示例。文中还包含通过I2C读写寄存器的具体操作指令,取流freeze可能原因和解决方法。

qq_38089448的博客 2489

手把手教你学veriolg(二十六)-- Verilog CIC 滤波器设计

目录 Verilog CIC 滤波器设计1. CIC 滤波器的基本原理2. Verilog 实现3. 说明4. 测试激励5. 总结 CIC(Cascade-Integrator-Comb)滤波器是一种特殊的数字滤波器,常用于多速率信号处理中,尤其是用于信号的上采样(插值)和下采样(抽取)。CIC 滤波器的特点在于它具有简单的硬件实现、不需要乘法器(仅使用加法器和延迟元件)、且具有线性相位特性。然而,CIC 滤波器的缺点是它会产生较大的量化误差,因此在设计时需要特别注意字长的选择以避免溢出。1. CIC 滤波

MHD0815的博客 889

Delphi调用 C# 写的webservice

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33939843的博客 265

JAVA:Spring Boot 集成 Baidu UID-Generator ID 生成器

百度UID-Generator是一款高性能分布式ID生成器,支持600万QPS,提供Snowflake扩展版和Cache模式两种实现方式。文章详细介绍了如何在Spring Boot项目中集成该组件,包括Maven依赖配置、MySQL表结构初始化、Spring Boot数据源配置、WorkerId分配策略实现以及UID生成器的核心配置。该方案具有无中心依赖、ID单调递增、支持集群部署等特点,适用于订单号、用户ID等分布式场景。通过缓存模式(Cache-Buffer)可进一步提升性能,满足高并发业务需求。

木头 487

如何用delphi7调用c#写的webservice服务?

====================================================== 注:重要!用眼过度需要养眼,点此养眼! ====================================================== 如何用delphi7调用c#写的webservice服务? 我们现在做的东东都是在asp.net中用c#开发的,但以前用的是del

95

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

没头没尾--项目开发笔记:C#分布式工程的修改版本

标题:没头没尾--项目开发笔记:C#分布式工程的修改版本 关键词:分布式开发 C# 项目分工 DELPHI与C#的混合开发       11月20号:有点兴奋有点困说回忆实在有点麻烦,我还是直接跳到目前的项目状态来讲讲我们是怎么具体实现的吧。接着昨天下午的写吧。我想首先对我们具体实现的工程过程用最简单的方式描述一下。一开始我们给客户做一个ASP.NET的实现,然后根据我们的调研

ViktorYu的专栏 1449

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Delphi开发WebService给ASP.NET调用

申明: 1、本文档分3个项目组,分别为: 用Delphi编写WebService 在IIS下安排WebService 在ASP.NET中调用webservice 2、开辟景象为Windows XP SP2、Delphi 7.0、IIS 5.1、VS 2008(C#)   一、用Delphi编写WebService 第1

easyboot的专栏 1040

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

关于C#下写的Web Service 服务在Delphi下调用时的问题

关于C#下写的Web Service 服务在Delphi下调用时的问题        首先我觉得有必要把.net平台下开发webservice进行一个比较全面的阐述,web service的最初产生是在电子商务的环境下出现的,有些问题通过传统的手段已经不容易解决,比如在应用程序之间进行商务通信、数据交换,使用DCom、CORBA等二进制机制的东西已经行不通了,姑且不说他们受各自平台的限制,比如DC

Ansel's Blog 1144

delphi调用webservice

如今 Web Service 已越来越火了,在DotNet已开发的Web Service中,Delphi 7如何方便的调用DotNet写的Web Service呢? 方法有两种,一种是在Delphi 7中WSDLImp工具将DotNet写的Web Service转化为Interface 单元文件,另一种方法是用MS 提供的 Microsoft Soap Toolkit(MSST) 工具。

踏雪无痕 4282

delphi6调用.NET WEBSERVICE注意事项

客户端程序由delphi6开发,WEB SERVICE是VS2005(C#)写的。碰到的问题很多,大都GOOGLE都可以找到答案。但有些我还是重复一下,另外我碰到的一些问题也在这里备注一下。刚开始是在Delphi6+sp1的环境下开发客户端程序,会出现Internal error(500)的错误或调用的web service的命名空间不正确,无法正确解析。解决办法是在用wsdl importe

QK的专栏 3069

Delphi调用 .net webService 返回数据;

最近在做此方面的工作,.net webService 返回的xml数据到了Delphi端就无法解析成数据源,通过将.net DataSet格式化为Delphi可以解析的格式即可实现正常数据通信 using System; using System.Collections.Generic; using System.ComponentModel; using System.Colle

Lisbi的专栏 1557

Delphi 调用C#编写的WebService 参数为Null解决方法

今天测试.net 2.0的WebService,发现了一个大问题。就是无法获取参数,参数永远是null。当然了使用.net调用 没有任何问题,web测试页也正常。不论是Delphi7还是java调用的结果的都是一样的,难道是.net 2.0的Bug?测试结果发现:值类型参数全部为缺省值,引用类型全部为null 在不断尝试中发现vs2003生成的web Services,delp

dainiao01的专栏 3421

关于c#下写的web service 服务在delphi下调用时的问题[转]

首先我觉得有必要把.net平台下开发webservice进行一个比较全面的阐述,web service的最初产生是在电子商务的环境下出现的,有些问题通过传统的手段已经不容易解决,比如在应用程序之间进行商务通信、数据交换,使用DCom、CORBA等二进制机制的东西已经行不通了,姑且不说他们受各自平台的限制,比如DCom(Distribute Common Objects Model)只能在...

weixin_34383618的博客 71

如何在 Delphi 与 .NET Web Service 之间互相传输DataSet (2)

.NET Web Service 中 DataSet 参数传输时, 是把 DataSet 转换成 XML 格式的串进行传输, 这样的弊端是, 数据传输过大, 还有的就别的语言写的程序很难调用本人在一个项目过程中, 需要.NET 写 Web Service, 而客户端需要Delphi来实现鉴于这个原因, 我通过把DataTable转换成文本串的方法, 在上一篇文章中实现如何在 .NET 中如...

weixin_34080903的博客 78

Delphi (c++builder) 调用C#编写的WebService 参数为Null解决方法

今天测试.net 2.0的WebService,发现了一个大问题。就是无法获取参数,参数永远是null。当然了使用.net调用 没有任何问题,web测试页也正常。不论是Delphi7还是java调用的结果的都是一样的,难道是.net 2.0的Bug? 测试结果发现:值类型参数全部为缺省值,引用类型全部为null WebService的代码如下: [WebMethod]

bobWu 的 学习日记 2193
上一篇: 常用的C#正则表达式!
下一篇: Chukeh 小诸葛 .Net 通用类库
EasyFRMS
博客等级 码龄18年 5粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值