【问题标题】:how to create WCF soap service with List param to be consume from android如何使用列表参数创建 WCF 肥皂服务以从 android 使用
【发布时间】:2012-10-02 05:13:23
【问题描述】:

我需要传递一个List<string> or List<object> 来使用来自 Android 的 WCF 肥皂服务。我已经尝试了很多方法。

当我使用下面的代码时:

公共类 MarshalArray 实现 Marshal{

@Override
public Object readInstance(XmlPullParser parser, String namespace, String name,
        PropertyInfo expected) throws IOException, XmlPullParserException {

    return GenericType.getObject(parser.nextText());
}

@Override
public void register(SoapSerializationEnvelope envelope) {
    envelope.addMapping("http://schemas.datacontract.org/2004/07/WcfService1", "GenericType", GenericType.class, this);
}

@Override
public void writeInstance(XmlSerializer writer, Object obj)
        throws IOException {
    GenericType sp =  (GenericType) obj;

    writer.startTag("http://schemas.datacontract.org/2004/07/WcfService1", "mydata");       
    for(String str : sp.mydata){
        writer.startTag("http://schemas.datacontract.org/2004/07/WcfService1", "string");
        writer.text(str);
        writer.endTag("http://schemas.datacontract.org/2004/07/WcfService1", "string");

    }       
    writer.endTag("http://schemas.datacontract.org/2004/07/WcfService1", "mydata"); 

    }}

使用以下 wcf 服务:

[ServiceContract]
[ServiceKnownType(typeof(WcfService1.GenericType<string>))]
public interface IService1
{

    [OperationContract]
    [ServiceKnownType(typeof(WcfService1.GenericType<string>))]
    string GetDataList(GenericType<string> objs);
} 

 [DataContract(Name = "GenericType")]
public class GenericType<T>
{
    List<T> data;

    [DataMember]
    public List<T> mydata
    {
        get { return data; }
        set { data = value; }
    }
}

Wcf 服务返回一个肥皂错误错误,例如: 内部服务错误..

然后我尝试了另一种方式:

public class Members extends Vector<String> implements KvmSerializable {

private static final long serialVersionUID = -1166006770093411055L;

@Override
public Object getProperty(int index) {
    return this.get(index);
}

@Override
public int getPropertyCount() {
    return this.size();
}

@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo param) {
    param.name = "String";
    param.type = PropertyInfo.STRING_CLASS;
}

@Override
public void setProperty(int arg0, Object obj) {
    this.add(obj.toString());
}

}

使用以下 wcf 服务:

[ServiceContract]

公共接口IService1 {

[OperationContract]

string GetDataList(List<string> objs);

}

我收到从 wcf 服务返回的 soap 错误错误:

Deserialization fail...

每次我从 wcf 服务中得到一个错误 .. 我认为我的 wcf 服务有问题。 如果有人知道答案..请回答我的问题。

非常感谢...

【问题讨论】:

    标签: android wcf android-ksoap2


    【解决方案1】:

    我终于得到了答案……

    我决定使用 MarshalArray 类,而不是 Members(KvmSerializable)。

    在使用 MarshalArray 时, 问题出在 android 的 MarshalArray 类中。

    这是发生错误的旧代码:

     for(String str : sp.mydata){
        writer.startTag("http://schemas.datacontract.org/2004/07/WcfService1", "string");
        writer.text(str);
        writer.endTag("http://schemas.datacontract.org/2004/07/WcfService1", "string");
    
    }       
    

    我把它改成如下:

    for(String str:gt.mydata){
            writer.startTag("http://schemas.microsoft.com/2003/10/Serialization/Arrays", "string");
            writer.text(str);
            writer.endTag("http://schemas.microsoft.com/2003/10/Serialization/Arrays", "string");               
        }
    

    然后就成功了……

    感谢您的帮助,stepoverflow。我必须自己找出答案.... !!

    【讨论】:

      猜你喜欢
      • 2017-08-25
      • 2013-03-14
      • 2018-04-12
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多