Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ksoap2向WCF服务发送复杂对象数组

ksoap2向WCF服务发送复杂对象数组
EN

Stack Overflow用户
提问于 2015-11-09 23:41:26
回答 1查看 1.1K关注 0票数 0

我正在尝试从android客户端向我的WCF服务发送一系列复杂的对象。我使用http://seesharpgears.blogspot.ru/2010/10/web-service-that-returns-array-of.html作为接收复杂对象数组的示例,这很好。但我不知道怎么发送这个数组。

我正在为对象使用kmv序列化:公共类RatingHttps实现KvmSerializable {

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public int CIsso;

public int RatingIsso;

public long RatingDate;

public String RatingExt;

public RatingHttps() {super();}

public RatingHttps(int CIsso, int RatingIsso, long RatingDate, String RatingExt) {
    this.CIsso = CIsso;
    this.RatingIsso = RatingIsso;
    this.RatingDate = RatingDate;
    this.RatingExt = RatingExt;
}

@Override
public Object getProperty(int i) {
    Object property = null;
    switch (i) {
        case 0:
            property = this.CIsso;
            break;
        case 1:
            property = this.RatingDate;
            break;
        case 2:
            property = this.RatingExt;
            break;
        case 3:
            property = this.RatingIsso;
            break;
    }
    return property;
}

@Override
public int getPropertyCount() {
    return 4;
}

@Override
public void setProperty(int i, Object o) {
    switch (i) {
        case 0:
            this.CIsso = Integer.parseInt(o.toString());
            break;
        case 1:
            this.RatingDate = Long.parseLong(o.toString());
            break;
        case 2:
            this.RatingExt = o.toString();
            break;
        case 3:
            this.RatingIsso = Integer.parseInt(o.toString());
            break;

    }
}
private static final String NAMESPACE = "http://schemas.datacontract.org/2004/07/Ais7UpdateServer";

@Override
public void getPropertyInfo(int i, Hashtable hashtable, PropertyInfo propertyInfo) {
    switch (i) {
        case 0:
            propertyInfo.type = PropertyInfo.INTEGER_CLASS;
            propertyInfo.name = "CIsso";
            propertyInfo.setNamespace(NAMESPACE);
            break;
        case 1:
            propertyInfo.type = PropertyInfo.LONG_CLASS;
            propertyInfo.name = "RatingDate";
            propertyInfo.setNamespace(NAMESPACE);
            break;
        case 2:
            propertyInfo.type = PropertyInfo.STRING_CLASS;
            propertyInfo.name = "RatingExt";
            propertyInfo.setNamespace(NAMESPACE);
            break;
        case 3:
            propertyInfo.type = PropertyInfo.INTEGER_CLASS;
            propertyInfo.name = "RatingIsso";
            propertyInfo.setNamespace(NAMESPACE);
            break;
        default: break;
    }
}

我就是这样用它的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<RatingHttps> ratings = new ArrayList<>();
        RatingHttps rating = new RatingHttps();
        rating.CIsso = 1;
        rating.RatingIsso = 2;
        rating.RatingExt = "LOL";
        rating.RatingDate = 3;
        ratings.add(rating);
        rating = new RatingHttps();
        rating.CIsso = 10;
        rating.RatingIsso = 20;
        rating.RatingExt = "OLOLO";
        rating.RatingDate = 30;
        ratings.add(rating);
            //cr.moveToNext();


        //request = GetSoapObject(METHOD_NAME[2]);
        request = new SoapObject(NAMESPACE, METHOD_NAME[2]);

        //envelope = GetEnvelope(request);
        request.addProperty("id", resultId.toString());
        //PropertyInfo pi = new PropertyInfo();
        //pi.setName("ratings");
        //pi.setValue(ratings);
        //pi.setType(ratings.getClass());

        //request.addProperty(pi);
        request.addProperty("ratings", ratings);

        //envelope.addMapping(NAMESPACE, ratings.getClass().getSimpleName(), ratings.getClass());
        envelope.addMapping(NAMESPACE, "ArrayOfRatingHttps", RatingHttps.class);
        SoapObject count = (SoapObject) SecureConnect(SOAP_ACTION[2], request, envelope);

SecureConnect:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private Object SecureConnect(String soapAction, SoapObject request, SoapSerializationEnvelope envelope) {
    try {
        if(request != null) {
            envelope.setOutputSoapObject(request);
            envelope.dotNet = true;
        }
        HttpsTransportSE androidHttpsTransport = new HttpsTransportSE(host, port, subFile, 20000);
        androidHttpsTransport.call(soapAction, envelope);
        return envelope.getResponse();
    } catch (Exception e) {
        result = e.toString();
        Log.d("Tag", "Ошибка: " + e.toString());
        return null;
    }
}

我尝试过数组,比如Rating[]..。但这是行不通的。该怎么办呢!也许有人有一些例子,怎么做呢?请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-17 21:51:04

在网上搜索了许多小时之后,我终于找到了一个有用的例子。如果您有同样的问题,请确保发送正确的xml文件。首先,我将必须接收的xml文件与服务器上的xml文件匹配。当我发现它们是相同的时,我在标记中发现了一个错误,我将演示如何在代码中这样做:我的RatingHttps类与我的问题相同;例如,在我的类中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<RatingHttps> rating = new ArrayList<>();
        RatingHttps ratings = new RatingHttps();
        ratings.CIsso = 1;
        ratings.RatingIsso = 2;
        ratings.RatingExt = "LOL";
        ratings.RatingDate = 3;
        rating.add(ratings);

接下来,请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
request = new SoapObject(NAMESPACE, METHOD_NAME[2]);
        SoapObject ratingRequest = new SoapObject(NAMESPACE, "ArrayOfRatingHttps");
        request.addProperty("id", resultId.toString());
        PropertyInfo pi = new PropertyInfo();
        pi.setName("ratings");
        pi.setValue(ratingRequest);
        pi.setType("ArrayOfRatingHttps");
        request.addProperty(pi);

        for(int i = 0; i < rating.size(); i++) {
            SoapObject rate = new SoapObject(RatingHttps.NAMESPACE, RatingHttps.class.getSimpleName());

            //Добавляем значения RatingHttps в xml запрос
            rate.addProperty(getPropInfo(rating.get(i).getAttributeName(0), rating.get(i), rating.get(i).getAttributeType(0)));
            rate.addProperty(getPropInfo(rating.get(i).getAttributeName(1), rating.get(i), rating.get(i).getAttributeType(1)));
            rate.addProperty(getPropInfo(rating.get(i).getAttributeName(2), rating.get(i), rating.get(i).getAttributeType(2)));
            rate.addProperty(getPropInfo(rating.get(i).getAttributeName(3), rating.get(i), rating.get(i).getAttributeType(3)));

            ratingRequest.addSoapObject(rate);
        }
        envelope.addMapping(NAMESPACE, RatingHttps.class.getSimpleName(), RatingHttps.class);
HttpsTransportSE androidHttpsTransport = new HttpsTransportSE(host, port, subFile, 20000);
        androidHttpsTransport.call(soapAction, envelope);

在我的xsd文件中找到了用于数组的"ArrayOfRatingHttps“。如果您有wcf服务,您可以在您的地址"address?xsd=xsd2“中找到它。我还实现了一个函数getPropInfo,下面是代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private PropertyInfo getPropInfo(String name, RatingHttps rating, Object type) {
    PropertyInfo pi = new PropertyInfo();
    pi.setName(name);
    pi.setValue(rating.getCIsso());
    pi.setType(type);
    pi.setNamespace(RatingHttps.NAMESPACE);
    return pi;
}

在作为targetNamespace的服务的xsd文件中也找到了命名空间。就这样,现在我可以发送一个复杂对象数组了。希望有一天能帮上忙..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33625004

复制
相关文章
Apache Kafka-SpringBoot整合Kafka发送复杂对象
我们先对 Kafka-Spring 做个快速入门,实现 Producer发送消息 ,同时Consumer 消费消息。
小小工匠
2021/08/17
2.2K0
ksoap2:实现gzip压缩发送request data
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/52484312
10km
2019/05/25
4180
AJAX如何向服务器发送请求?
AJAX(Asynchronous JavaScript and XML)是一种在Web应用程序中向服务器发送异步HTTP请求的技术。它通过在后台发送请求并异步地获取响应,实现了与服务器进行数据交互而不需要刷新整个页面。
网络技术联盟站
2023/07/07
5590
AJAX - 向服务器发送请求请求
如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:
chenchenchen
2022/11/29
1.8K0
Ajax向服务器端发送请求
Ajax 相当于浏览器发送请求与接收响应的代理人,以实现在不影响用户浏览页面的情况下,局部更新页面数据,从而提高用户体验。
小丞同学
2021/08/16
2.2K0
WCF系列教程之WCF服务宿主与WCF服务部署
本文参考自http://www.cnblogs.com/wangweimutou/p/4377062.html,纯属读书笔记,加深记忆。 一、简介 任何一个程序的运行都需要依赖一个确定的进程中,WCF也不例外。如果我们需要使用WCF服务,那么我们就必须将服务寄宿与创建它并控制它的上下文和生存期的运行时环境当中,承载服务的环境,称之为宿主。WCF服务可以在支持托管代码的任意Windows进程中运行。WCF提供了统一编程模型,用于生成面向服务的应用程序。此编程模型保持一致且独立于部署服务的运行时环境。 实际上,
郑小超.
2018/01/26
1.4K0
检测WCF服务是否在线(动态执行WCF服务)
MJ.Zhou
2018/01/04
1.4K0
使用 Spring Cloud Bus 向指定的微服务发送消息
要向指定的微服务发送消息,需要使用 Spring Cloud Bus 提供的 DestinationProvider 接口,该接口可以返回目标微服务的名称。在消息广播时,Spring Cloud Bus 会根据目标微服务的名称将消息发送到指定的微服务中。
堕落飞鸟
2023/04/18
8180
WCF系列教程之WCF服务协定
本文参考自:http://www.cnblogs.com/wangweimutou/p/4422883.html,纯属读书笔记,加深记忆 一、服务协定简介: 1、WCF所有的服务协定层里面的服务接口,
郑小超.
2018/01/26
8690
WCF系列教程之WCF服务配置
文本参考自:http://www.cnblogs.com/wangweimutou/p/4365260.html 简介:WCF作为分布式开发的基础框架,在定义服务以及消费服务的客户端时可以通过配置文件的方式,来进行设置,这充分的体现了WCF的伸缩性和自定义性。当然WCF也提供硬编程的方式,通过在代码中直接设置相关对象的属性来完成服务端与客户端的配置,然而这种方式并不利于后期程序的更改和扩展。 一、WCF配置文件结构如下图所示,包含三个部分,services(服务)、bindings(绑定)、behavior
郑小超.
2018/01/26
1.5K0
element-ui 对复杂对象型数组进行表单验证
1、需求场景,需要动态修改物流信息对象,并需要验证的复杂数据对象,所以我们只分析怎样验证复杂数据结构的数据,也就是上面的‘dialogFrom.options’中的对象数组。如何遍历该数组,来给每个元素添加验证呢?
用户2323866
2021/06/23
3.8K0
ios objc向一个对象发送消息时,发生了什么?
根据对象的isa指针找到该对象所属的类,去obj的对应的类中找方法 1.首先,在相应操作的对象中的缓存方法列表中找调用的方法,如果找到,转向相应实现并执行。 2.如果没找到,在相应操作的对象中的方法列表中找调用的方法,如果找到,转向相应实现执行 3.如果没找到,去父类指针所指向的对象中执行1,2. 4.以此类推,如果一直到根类还没找到,转向拦截调用,走消息转发机制。 5.如果没有重写拦截调用的方法,程序报错。
赵哥窟
2018/09/13
1.8K0
ios objc向一个对象发送消息时,发生了什么?
Android端调用c#端的webservice——复杂数据类型传递
相信许多android安卓初学者和我一样,一开始认为的android调用webservice不过是按照固定的模式修改一下
code2roc
2023/07/19
3300
Android端调用c#端的webservice——复杂数据类型传递
WCF系列教程之WCF服务配置工具
本文参考自http://www.cnblogs.com/wangweimutou/p/4367905.html Visual studio 针对服务配置提供了一个可视化的配置界面(Microsoft
郑小超.
2018/01/26
9740
python调用wcf服务
# -*- coding: utf-8 -*- from suds.client import Client import json # wcf地址 client = Client('http://w
py3study
2020/01/10
1.3K0
js 对象转数组对象_js 对象数组
var obj = {name:”张三”,name:”李四”,name:”王五”};
全栈程序员站长
2022/09/30
31.7K0
java对象数组 创建对象数组,初始化对象数组
对象数组的概念: 如果一个数组中的元素是对象类型,则称该数组为对象数组。 当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象。 对象数组的定义和使用: 对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例化。 对象数组的声明形式是: 类名 对象数组名 [ ]; 为对象数组分配内存空间: 对象数组名=new 类名[数组长度];//注意 :此处不是构造方法了 可以将对象数组的声明和创建用一条语句来完成。例如:定义一个学生类对象数组,可以用下面的语句定义:Student stu[ ]=new Student[30]; stu [ ]是对象数组名,它所表示的数组一共有30个元素,每一个元素都是Student类的对象名,还没有实例化,所以还必须为每一个元素实例化。比如如下的过程: for(int i=0;i<stu.length;i++) stu[i]=new Student(); 实例化以后就可以使用每一个元素对象。 设计一个雇员类,并创建雇员类的对象数组,输出每个雇员的信息
用户7886150
2021/02/01
3.9K0
WCF发布多个服务
using System; using System.Collections.Generic; using System.Linq; using System.Text; using WcfServiceLibrary1; using System.ServiceModel.Configuration; using System.Configuration; using System.Reflection; using System.ServiceModel; namespace ConsoleApplic
hbbliyong
2018/03/05
9870
WCF发布多个服务
基于WAS 部署WCF服务
Windows (Process) Activation Service (WAS)作为 IIS7.0 特有的新增功能,和以前IIS 6.0的功能相比更加强大,因为它提供并支持除HTTP之外的更多协议,比如TCP方式和Pipe(管道)方式。利用WAS作为WCF(Windows Communication Foundation)的宿主,我们能充分利用WAS的很多优点,因为我们再也不用为非HTTP方式的WCF Service单独编写宿主程序了。而WAS本身的特点,也让我们的服务端程序能享受到只有以往的HTTP方
张善友
2018/01/22
1.4K0
基于WAS 部署WCF服务
向服务器发送josn字符串,服务器端解析
<script type="text/javascript"> $(function () { $("#btnsave").click(function () { var json = { "age": 12, "address": "hk", "ship": [ { "custID": "sz", "cpname": "bookstrf" },{ "custID": "fkff",
跟着阿笨一起玩NET
2018/09/19
7440
向服务器发送josn字符串,服务器端解析

相似问题

使用ksoap2向.NET web服务发送复杂对象数组

25

如何向WCF服务发送对象数组?

11

使用KSOAP2向WCF服务发送参数值的锯齿数组

10

向WCF发送对象数组

32

web服务Ksoap2复杂对象

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文