как создать службу WCF soap с параметром List для использования с Android
-
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.Я должен был найти ответ сам....!!