Java传值decimal类型的_.NET向WebService传值为decimal、double、int、DateTime等非string类型属性时,服务器端接收不到数据的问题...

最近在做CRM项目时,使用C#调用SAP PI发布的WebService服务时遇到的问题: 向WebService传递decimal、double、int、DateTime等非string类型数据时,服务器端接收不到数据。查询了很多资料,终于解决了问题,总结如下。

问题现象:

用C#.NET调用PI开发的WebService时,在客户端将封装的带有decimal属性的对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int、double、decimal类型和DateTime类型的属性值

问题结症:

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

由于服务端对象的非String属性(int,double,decimal,DateTime...)设置了可以为空(minOccurs="0"),在客户端调用服务方法SI_Create(I_Customer customer)的时候传递一个Customer对象,设置了可以为空的非String属性在服务端接收不到属性数据。

以decimal为例:

服务端程序:SI_Customer_Out_SynService对外提供SI_Create(I_Customer customer)方法,返回Customer编号,其中Customer包含属性:UMSA1(decimal类型)。

问题解决:

1.Web服务端配置

Annual sales

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

VS2013封装WebService引用时,如果WebService发布的是一个基本数据类型组成的对象,则进行如下设置:

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

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

参考:http://liyuandong.iteye.com/blog/782246

C# 调用java的Webservice时关于非string类型处理

比如webservice地址是:http://wdft.com:80/services/getOrderService1.0?wsdl 方法是:getOrder 1.首先添加引用: 2. 3.引用完成 ...

C++取出string的一部分以及int型转成string类型

在实际应用中,对文件的操作是十分频繁的,我们需要对文件进行拷贝,重命名等操作,这是就需要获取文件的绝对路径,一般情况下,该路径是以字符串的形式存储的,如果我们需要对文件进行重命名等,就需要对绝对路径这 ...

所学新知——int、char型转string 类型等

1. 利用stringstream类 定义头文件#include 通过 int a; char b; sstream ss,ss1; ss<

C&plus;&plus;中将string类型转换为int&comma; float&comma; double类型 主要通过以下几种方式:

C++中将string类型转换为int, float, double类型 主要通过以下几种方式: # 方法一: 使用stringstream stringstream在int或float类型转换为 ...

C&num;中decimal &comma;double&comma;float的区别

浮点型 Name CTS Type Description Significant Figures Range (approximate) float System.Single 32-bit sin ...

&lbrack;转载&rsqb; c&num;中decimal &comma;double&comma;float的区别

一直很奇怪C#的预定义数据类型中为什么加了一个decimal,有float和double不就够了吗?今天来挖一挖. 浮点型 Name CTS Type De script ion Significan ...

String类型传值以及对象传值

package Virtual; class Stan{ String mm = "hello"; } class Virtual { public static void mai ...

C&plus;&plus; double类型转string类型后&comma;怎么实现小数点后只显示一个数字

C++ double类型转string类型后,怎么实现小数点后只显示一个数字 #include #include #include & ...

将String类型的数字字符转换成int

java.lang.Integer.parseInt(String) public static int parseInt(String s) throws NumberFormatException ...

随机推荐

javascript中正则实现读取当前url中指定参数值方法。

getQueryString:function(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*) ...

UVAoj 348 - Optimal Array Multiplication Sequence

/* 题意:矩阵相乘的最少的步数 dp[i][j]=min(dp[i][j], dp[i][k]+dp[k+1][j]+num[i-1]*num[k]*num[j]); 表示的是第i个矩阵到第j个矩阵 ...

vi编辑文件出现Can&&num;39&semi;t open file for writing错误

可以用 ll 命令查看一下文件的权限,很有可能是没有权限,用chmod命令修改一下权限就可以了(当然是文件所有者或者root用户才能修改),或者切换成root用户(不推荐)

22&period;Android之ExpandableListView树形列表学习

Android经常用到树形菜单,一般ExpandableListView可以满足这个需要,今天学习下. XML代码: <?xml version="1.0" encoding ...

Windows手动添加开机启动项

@方法1. 添加程序完整路径到注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下 或者添加到HKEY_CURREN ...

tomcat 详解

首先搞清楚几个概念:Servlet容器与web容器.Servlet容器的主要任务是管理servlet的生命周期,而web容器更准确的说应该叫web服务器,它是来管理和部署web应用的.还有一种服务器叫 ...

Spring事务配置的五种方式(转发)

Spring事务配置的五种方式(原博客地址是http://www.blogjava.net/robbie/archive/2009/04/05/264003.html)挺好的,收藏转发 前段时间对Sp ...

Import data from SQLServer with Sqoop

author: luciuz date: 2013/11/15 -------------------------------------------------------------------- ...

&lbrack;Swift&rsqb;LeetCode687&period; 最长同值路径 &vert; Longest Univalue Path

Given a binary tree, find the length of the longest path where each node in the path has the same va ...

electron-builder 由于网络原因无法下载问题解决

electron-builder 由于网络原因无法下载问题解决 在package.json的build中添加electron的镜像 "electronDownload": { &q ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值