`
liyuandong
  • 浏览: 331714 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

c#调用Java webService的专题(一)

阅读更多

.NETwebServicedoubleintDateTime 服务器得到的数据时null的问题

       最近被一个 c#调用 Java web service的问题困扰,查询了一些资料,但都不详尽,于是自己动手做了个示例,发现问题,总结下。。。烦大家拍砖。。

      问题现象:

C#.NET调用Java使用xfire)开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型、doubleDateTime类型的值(在服务端得到的均为null

问题结症:

    简单说一下WebService的工作原理。客户端调用一个WebService的方法,首先需要将方法名和需要传递的参数包装成XML(也就是SOAP),通常是通过HTTP传递到服务器端,然后服务器端解析这段XML,得到被调用方法名称和传递来的参数,进而调用WebService实例的相应方法。方法执行完成之后,将返回的结果再包装成XML(SOAP响应)发送到客户端,客户端解析这段XML,进而得到返回结果。这里关键的地方在于中间加入了对象和XML相互转换的过程。

 由于服务端通过aegis方式对对象的非String属性(int,double,DateTime..)设置了可以为空(nillable="true"),在客户端调用服务方法saveUser(JafUser user)的时候传递一个User对象, 设置了可以为空的非String属性在服务端接收到相对应的NULL(int类型为0double类型为0.0,DateTimeNULL)

intdouble为例 :

服务端程序:ExampleService对外提供saveUser(JafUser user)方法。返回User属性拼接的串。其中User3个属性: userId ( int类型 ) userName(String类型)weight(double类型)

 

问题解决(分2步):
     
1.web服务端Xfireaegis绑定方式配置

JafUser.aegis.xml对对象JafUser通过XML传输的设置

<mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://xfire.codehaus.org/schemas/1.0/mapping.xsd">

         <mapping>

                   <property name="userId"   style="element"  minOccurs="0" maxOccurs="1" nillable="true" />

                   <property name="userName"  style="element" minOccurs="1" maxOccurs="1" nillable="false" />

                   <property name="weight"   style="element" minOccurs="1"  maxOccurs="1" nillable="false" />

         </mapping>

</mappings>

2.在客户端调用时进行设置。

VS2008封装WebService引用时,如果WebService发布的是一个基本数据类型组成的对象:(JafUser为例)

a.            该对象中非string属性为minOccurs="0"  nillable="true"设置时(表示该属性可以为空)), 则会对该对象的非string属性同时生成两个属性,一般是这样的"属性Field""属性××Specified"。而"属性名Specified"是一个bool类型,只有这个属性被设置成true"属性Field"的值才会被序列化成xml传递。否则,服务端接收到的值为0(int的话,接收到0)0.0(double接收到0.0)

b.                   该对象中非string属性为minOccurs="1" maxOccurs="1" nillable="false"设置时(表示该属性不能为空,为必填项),如果该属性不赋值,则服务端则接收到的值为0.0

 

 

附:

         附件中为示例,客户端为VS2008应用程序。服务端为编译后的程序,解压后直接将里面的xfireService文件夹扔到tomcat的webapps目录中,启动服务后,浏览器中输入http://localhost:8080/xfireService/services/exampleService?wsdl就可看到服务描述文件了,之后,就可以通过VS2008的客户端调试了。。如有问题,留言。。

 

分享到:
评论
6 楼 zb1058849532 2015-01-06  
​客户端(C#)通过HTTP协议怎么向服务器端(java)传送数据(比如用户名、密码 、表单填入信息) ,服务器端又怎么解析?可以提供个简单例子?
5 楼 martin_tony 2014-09-09  
非常感谢楼主,思路很清晰。适合初学者。谢谢
4 楼 niexiting 2012-12-13  
C#调用Java(使用CXF)开发的WebService时,也是这样吗?
3 楼 harobnm 2012-04-26  
写的不错,稍微改一下就可以用了,学习了!!!非常感谢!!!
2 楼 梦九天 2011-11-08  
  挺不错的 呵呵
1 楼 liweibird 2011-07-28  
终于找到一个清晰、详尽的解答。
3Q

相关推荐

    C#调用JavaWebService

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...

    C#调用java发布的WebService终稿.pdf

    C# 调用 Java 发布的 WebService 是一种常见的跨语言通信方式。在本文中,我们将介绍如何使用 C# 调用 Java 发布的 WebService。 标题解释 C# 调用 Java 发布的 WebService 终稿是指使用 C# 语言调用 Java 语言发布...

    C#调用JavaWebService(客户端)

    - **调用服务方法**:通过代理类的对象调用JavaWebService中的公开方法,传入参数并接收返回值。 3. **处理数据类型**: C#和Java的数据类型可能会有所不同,比如Java的`Date`在C#中可能是`DateTime`。为了解决...

    c#调用java带身份验证webservice

    综上所述,要使用C#调用Java带身份验证的Web服务,你需要生成客户端代理类,设置正确的身份验证头,处理XML响应,并确保具备良好的异常处理机制。这涉及到对.NET框架的理解,以及对XML和身份验证协议的熟悉。通过...

    .net调用java WebService

    ### .NET调用Java WebService的关键知识点 #### 一、背景与原理介绍 在实际的软件开发过程中,不同技术栈之间的交互变得越来越普遍。对于.NET应用程序来说,有时需要调用由Java开发的WebService。这种跨平台的服务...

    C#调用使用java的带soaphead的webservice

    最后,`C#调用使用java的带saophead的webservice-说明书.docx`应该是详细的步骤指南,包含了如何配置和调用Web服务的具体细节。确保按照说明书的指示操作,以确保正确地设置了SOAP Header和调用了Web服务。 总的来...

    Java调用C#的WebService例子

    Java调用C#的WebService是跨平台间通信的一种常见方式,尤其在企业级应用中,可能需要集成不同语言开发的服务。本示例介绍如何在Java环境中利用Xfire库来调用C#编写的WebService服务。 首先,理解WebService的核心...

    C#调用Java的webservice

    本主题将深入探讨如何使用C#调用Java编写的Web服务,这通常涉及到Web Service标准如SOAP(Simple Object Access Protocol)或现代的RESTful API。我们将分为服务端和客户端两大部分进行讲解。 一、服务端(Java Web...

    调用 java webservice 的问题

    因此,在C#调用Java WebService的场景下,Axis2是一个常用的选择。 ### 数据类型转换 在跨语言调用中,数据类型的转换是一个关键步骤。例如,在C#中,字符串类型可能被表示为`System.String`,而在Java中则为`java...

    C#调用WebService实例和开发(wsdl).rar

    在本例中,"C#调用WebService实例和开发(wsdl).pdf"可能包含详细的步骤和代码示例。 2. **添加引用**:将生成的代理类添加到你的项目中,这样就可以在C#代码中直接调用Web服务的方法。 3. **实例化代理类**:...

    asp.net调用java webservice实例

    本文将详细介绍如何在 ASP.NET 环境下使用 C# 调用 Java WebService。 #### Web Service 定义与特点 根据 W3C 的定义,Web Service 是一种设计用于支持网络上系统之间可互操作的软件系统: 1. **接口描述**:具有...

    C# 调用 JavaWebservice服务遇到的问题汇总

    总结一下,解决C#调用Java WebService服务时遇到的问题通常需要理解和配置协议版本、服务暴露配置以及可能的扩展标准。正确配置这些方面可以确保顺利地进行跨语言和跨平台的服务调用。在实际开发过程中,确保了解两...

    C# 动态调用WebService服务

    动态调用WebService服务是C#中的一个关键技能,它允许程序员在运行时与远程Web服务进行交互,而无需预先知道服务的具体接口或方法。本文将深入探讨如何在C#中实现这一功能,并提供相关知识点。 首先,理解...

    Java访问c#开发的webservice

    通过上述步骤,我们成功地创建了一个 C# 的 Web Service,并且使用 Java 实现了对其的远程调用。这种跨语言的交互方式极大地增强了系统的灵活性和可扩展性,是分布式应用开发中不可或缺的一部分。在未来的工作中,...

    java axis 调用C# webService所需的jar包

    在这种情况下,Axis作为一个成熟的SOAP客户端框架,可以帮助Java开发者实现对C# WebService的调用。本文将详细讲解如何使用Java Axis库来调用C# WebService,并介绍所需的jar包。 首先,理解Java Axis的基本概念是...

    c#调用Webservice经典例子

    总结来说,C#调用Java WebService的关键在于理解WebService的工作原理,正确添加服务引用,使用服务代理类进行调用,并处理返回的数据。这个经典例子——查询天气预报,可以帮助我们更好地掌握这一技能。同时,随着...

    C#调用java的webservice源代码

    标题“C#调用Java的Web Service源代码”暗示了这是一个关于C#客户端如何与Java服务端进行通信的实例。Web Service是一种基于HTTP协议的、平台无关的通信方式,它允许不同系统间的组件通过SOAP(Simple Object Access...

    C#动态调用CXF WEBSERVICE框架的共通类

    C#动态调用CXF WEBSERVICE框架共通类。

    c#调用j2ee webservice 超详细 超傻瓜教程

    本教程将详细讲解如何使用C#调用J2EE WebService,帮助开发者实现这两种技术的无缝连接。 一、理解基础概念 1. C#:Microsoft .NET框架下的编程语言,广泛用于桌面应用、Web应用以及游戏开发。 2. J2EE(Java 2 ...

Global site tag (gtag.js) - Google Analytics