как создать службу WCF soap с параметром List для использования с Android

StackOverflow https://stackoverflow.com//questions/12684873

  •  12-12-2019
  •  | 
  •  

Вопрос

Мне нужно сдать экзамен List<string> or List<object> чтобы использовать сервис WCF soap с Android.Я перепробовал много способов.

Когда я использовал приведенный ниже код:

открытый класс 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 возвращает ошибку soap fault, например:Внутренняя служебная ошибка..

Тогда я попробовал по-другому:

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);

}

Я получил ошибку soap fault, которая возвращается из службы wcf:

Deserialization fail...

Каждый раз я получал сообщение об ошибке от службы wcf..Я думаю, что мой wcf служба что-то перепутала.Если кто - нибудь знает ответ ..пожалуйста, будьте добры ответить на мой вопрос.

Огромное спасибо...

Это было полезно?

Решение

Наконец-то я получил ответ...

Я решил использовать класс MarshalArray, а не Members(KvmSerializable).

При использовании MarshalArray проблема заключается в классе MarshalArray в Android..

вот старый код, в котором возникает ошибка:

 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.Я должен был найти ответ сам....!!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top