`
icelander
  • 浏览: 72527 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Dephi调用C#编写的WebService的一些问题与解决

阅读更多
问题1:服务端接收的所有中文都是"?????"(乱码)
解决:设置HTTPRIO控件的HTTPRIO.HTTPWebNode.UserUTF8InHeader属性为true



问题2:Dephi编写的客户端在windows2003下调用WebService提示"Access violation at address 00E59195. Write of address 00E59195"
解决:我的电脑属性->高级->性能->设置->数据执行保护。选中"只为关键 Windows 程序和服务启用数据执行保护。当然你可以选择另一个选项,并添加我们的客户端作为例外处理。有二点比较奇怪的,一、并不是每一台windows2003的机器都需要这样设置;二、有问题的2003机器使用.net写的客户端却能正常访问WebService。

问题3:从服务端得到的XML字符串,一分析就出错
解决:先使用WideString变量保存返回的XML字符串。再利用这个变量分析。string不能识别换行符。

问题4:服务端得到的参数都为空值
解决:检查一下引入的WebService单元的最后三行是否如下
initialization
  InvRegistry.RegisterInterface(TypeInfo(YourWebServiceSoap), 'http://tempuri.org/', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(YourWebServiceSoap), 'http://tempuri.org/%operationName%');
  InvRegistry.RegisterInvokeOptions(TypeInfo(YourWebServiceSoap), ioDocument);//这一行有时会没有
end.


这一行 InvRegistry.RegisterInvokeOptions(TypeInfo(YourWebServiceSoap), ioDocument);有时候没有的。举个例子,当我们的WebService的其中一个方法有参数的类型为DataSet时,单元文件的最后几行是这样的
initialization
  InvRegistry.RegisterInterface(TypeInfo(YourWebServiceSoap), 'http://tempuri.org/', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(YourWebServiceSoap), 'http://tempuri.org/%operationName%');
  RemClassRegistry.RegisterXSClass(GetDataSetResult, 'http://tempuri.org/', GetDataSetResult);
  RemClassRegistry.RegisterXSClass(updateSet, 'http://tempuri.org/', 'updateSet');
end.

这时,服务端接收到的所有参数都为null;这里你所手工在中间加入上面所提到的那一行。

问题5:服务端方法返回的DateTime,Delphi取得的时间不对。
解决:引用后,delphi是用TXSDateTime来接收C#的DateTime变量的。TXSDateTime有两个属性AsDateTime、AsUTCDateTime都是TDateTime,也就是Delphi用的日期变量了,但这两个属性得到的时间是不对的。放断点可以观察到TXSDateTime的年、月、时各变量都是正确的,所以解决的方式是取年月时分各变量重新组合成时间变量。
在这个过程,我碰到一个有趣的情况。看下面的C#代码
[WebMethod(EnableSession=true)]
public DateTime MyTime()
{
    DateTime cur = DateTime.Now;
    return cur;
}

[WebMethod(EnableSession=true)]
public DateTime YourTime(DateTime pTime)
{
    return pTime.AddDays(1);
}

Delphi调用后者,TXSDateTime中的AsDateTime属性保存的时间是对的。调用MyTime(),AsDateTime保存的时间就不对! 我以为AsUTCDateTime的情况可能会有所不同,但其实这里他与AsDateTime是一样的。另外,.net能不能再做些什么呢?我注意到.net的DateTime有这么一个方法ToUniversalTime;我在MyTime中尝试应用这个方法,结果更遭,delphi得到的年时分各变量的值不对了;期待AsUTCDateTime会给我惊喜,结果他还是与AsDateTime非常的一致;结果都不对。
分享到:
评论

相关推荐

    Delphi调用C#的Webservice返回Dataset

    总之,通过Delphi调用C#的Webservice返回Dataset是一种跨语言的数据交互方式,涉及到网络通信、数据序列化和反序列化等多个技术环节。熟练掌握这些技能,可以帮助开发者在多语言环境下构建高效、稳定的应用系统。

    delphi调用C#webservice.rar

    以上就是Delphi调用C# Web服务的基本流程和关键点。通过这个过程,Delphi程序可以充分利用C# Web服务提供的功能,实现跨平台的数据交换和业务协同。对于“传参解决工程”这个文件,可能是具体解决Delphi调用Web服务...

    Delphi调用C# WebService的例子

    Delphi调用C# WebService的例子 包括数据结构的访问

    delphi调用asp.net中的WebService 实例

    ASP.NET框架提供了构建WebService的强大支持,开发者可以使用C#或VB.NET等语言编写WebService。 在Delphi中调用ASP.NET WebService,主要涉及以下几个步骤: 1. **创建或获取WebService接口**:首先,你需要知道...

    Delphi调用Webservice一个完整的例子

    ### Delphi调用C#开发的Webservice服务详解 在软件开发领域,不同语言和平台间的相互调用是一项重要的技术需求。本文将详细介绍如何利用Delphi来调用由C#开发的Webservice服务,并通过一个具体的例子来演示整个过程...

    delphi+C#webservice上传文件

    总结来说,"delphi+C#webservice上传文件"是一个跨平台的应用程序开发实践,涉及到Delphi客户端通过Webservice与C#服务器端交互,实现文件的上传功能。理解Webservice的工作原理以及如何在Delphi和C#中分别实现文件...

    delphi调用webservice总结(c#,delphi,java).doc

    #### 一、Delphi调用C#编写的WebService 在实际项目开发中,Delphi与其他语言(如C#)编写的WebService进行交互是一种常见的需求。本文档主要介绍了如何使用Delphi 7来调用C#编写的WebService。 ##### 1. 导入WSDL...

    用Delphi-实现WebService

    本文将详细阐述如何利用 Delphi 来实现 WebService,包括服务端与客户端的开发流程。 #### 一、编写服务程序 首先,我们需要创建一个 WebService 服务程序。该服务程序将作为 WebService 的核心部分,负责处理来自...

    delphi自主处理webservice返回的结果集

    用delphi自带的XML Mapper,当结果集太大时速度非常慢,而且delphi7的Mapper有bug,于是自己写了一个pas文件来接收和处理xml结果集,希望能对大家有用。基本的处理方法都有了,速度比Mapper快了几十倍。

    解决Delphi7因数据执行保护导致的Webservice无法访问错误

    针对Delphi 7的Web Service调用问题,我们可以采取以下策略来解决DEP引发的错误: 1. **代码优化**:检查你的Delphi代码,确保没有尝试在数据段执行代码的异常行为。这可能包括检查动态分配的内存是否被正确释放,...

    Delphi开发和调用的webservice

    在本文中,我们将讨论如何使用Delphi来开发和调用Web服务,特别是与C#编写的Web服务进行交互。 首先,Delphi调用Web服务通常涉及以下几个关键步骤: 1. **导入WSDL文件**: - 导入Web服务的定义文件(WSDL,Web ...

    C# 调用WebService查询手机号码归属地

    本主题聚焦于如何利用C#调用WebService来查询手机号码的归属地。WebService是一种基于HTTP协议的网络服务,允许不同系统之间进行数据交换。在本案例中,我们将讨论如何构建或使用一个WebService接口来获取手机号码的...

    Delphi7调C#Webservice用返回ClientDataSet XML格式数据

    本篇文章将详细探讨如何在Delphi 7环境中调用C#编写的Web服务,并处理返回的ClientDataSet XML格式数据。Delphi 7是一款经典的面向对象编程工具,而C# Web服务则是一种基于.NET Framework的分布式应用程序,两者之间...

    Delphi调用webservice总结.pdf

    【Delphi调用WebService】是开发过程中的常见需求,特别是在多语言、跨平台的应用系统间进行数据交互时。本文主要围绕Delphi如何调用WebService,尤其是针对C#编写的WebService,进行详细的总结。 首先,调用...

    个人用DELPHI写的WEBSERVICE

    通过这个个人开发的DELPHI WEBSERVICE示例,我们可以深入了解如何利用DELPHI实现网络服务,以及在实践中可能遇到的问题和解决策略。对于想要深入学习DELPHI和Web服务开发的人来说,这是一个非常有价值的参考资料。

    Silverlight使用WebService调用C++,Delphi编写的DLL文件实例源码

    本实例源码主要展示了如何在Silverlight应用中通过WebService来调用C++或Delphi编写的DLL文件,这涉及到跨语言互操作性(Interoperability)和远程服务调用的关键技术。 首先,让我们深入理解Silverlight与...

    金蝶调用Webservice接口-SOAP

    本文主要介绍如何使用SOAP(Simple Object Access Protocol)方式来调用Webservice接口,以金蝶为例进行详细讲解。 首先,了解SOAP。SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。它通过HTTP...

    一个webService例子 动态调用

    Web服务(Web Service)是一种基于互联网的、...总的来说,动态调用Web服务是.NET开发中的重要技能,能够帮助开发者快速、灵活地与远程系统进行通信。了解并掌握这些知识点对于任何涉及Web服务交互的项目都至关重要。

Global site tag (gtag.js) - Google Analytics