C# .NET VS2010加载Web服务 传参失败

最近在做一个关于支付相关的项目,我们C#端是调用Java写的接口,调用过程中出现了一系列的问题,主要还是传参,以下是详细内容:

该问题的产生背景:

.net向webservice传double、int、datetime到服务器,而得到的返回值为null的情况,比如用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型、double和DateTime类型的值(在服务端得到的均为null)。

解决办法:

VS2005封装WebService引用时,如果WebService发布的是一个基本数据类型组成的对象,则会对该对象的非string属性同时生成两个属性,一般是这样的"属性××"、"属性××Specified"。而"属性名Specified"是一个bool类型,只有这个属性被设置成true时,"属性××"的值才会被序列化成xml传递。

综上所述,参数增多是VS2005为了解决C# .NET调用JAVA开发的Web服务过程中服务端接收的参数为NULL的BUG。

故参数增多不会影响到程序的正确运行,传入的参数基本上多就是一些boolean(布尔);全部传true即可得到正确的结果。

示例代码段如下:

1.设置Specified属性

        /// <summary>
        /// 设置Specified属性
        /// </summary>
        /// <param name="req"></param>
        public static void SetSpecified(OrderReq req)
        {
            req.pageSizeSpecified = true;
            req.pageNumSpecified = true;
            req.orderStatusSpecified = true;
            req.orderTypeSpecified = true;
            req.transactionMoneySpecified = true;
            req.userIdSpecified = true;
            req.transferTypeSpecified = true;
        }

2.调用接口

       public bool RentReserve(OrderReq req, ref string order)
        {
            //生成订单号
            var orderNo = WsHelper.CreateOrderNum();
            req.orderNo = orderNo;
            order = orderNo;
            //添加定金宝订单
            var result = false;
            var resultSpecified = false;
            WsHelper.SetSpecified(req);
            _ws.addEarnestOrder(req, out result, out resultSpecified);
        }
 


    设置XXSpecified属性之后,参数能如期的传递了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值