2011-04-29 14 views
7

può ksoap2 passare un enum a webservice?Come passare un valore enum a wcf webservice

c'è un webservice WCF:

[OperationContract] 
string TestEnum(CodeType code); 

CodeType è enum dotnet:

public enum CodeType 
    { 
     [EnumMember] 
     ALL, 

     [EnumMember] 
     VehicleColor 
    } 

Come posso chiamare questo webservice WCF al cliente Android?

ho creato un codice Code enunciato e implementato KvmSerializable. Nel metodo getPropertyInfo, qual è il valore di info.name (info.type)?

public enum CodeType implements KvmSerializable, BaseInterface { 
    ALL, 

    VehicleColor; 
//....... 
    @Override 
    public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) { 
     //info.namespace = this.NameSpace; 
     info.name = ?; 
     info.type = ?; 

    } 
} 

Grazie per il vostro aiuto.

+0

Ho lo stesso problema, qualcuno ha risolto questo? Grazie in anticipo! – cbuck12000

+0

@ cbuck12000: Non sono sicuro se ti verrà notificato o meno la mia risposta, ho pensato di assicurarmi che tu lo sapessi ... –

risposta

0

Hai

[ServiceContract] 
[ServiceKnownType(typeof(CodeType))] 
public interface ITheService 
{ 
    [OperationContract] 
    string TestEnum(CodeType code); 
} 

e

[DataContract] 
public enum CodeType 
{ 
    // ... 
} 

?

Edit:

Un po 'di ricerca anche alzato this, che può essere utile ...

+0

Penso che il mio problema sia con KSoap2. Come inviare un parametro del valore enum a un metodo di servizio Web o gestire una proprietà enum all'interno di una classe restituita da un metodo). Posso serializzare oggetti complessi e simili, ma senza enumerazioni ?? – cbuck12000

4

ho appena risolto che enum-Problema via maresciallo.

Ho creato un Java-Enum "copia" di .net. Poi ho scritto un maresciallo-Class per esso:

public class MarshalEnum implements org.ksoap2.serialization.Marshal 
{ 
    ... // Singleton-Pattern 

    public Object readInstance(XmlPullParser xpp, String string, String string1, 
          PropertyInfo pi) 
     throws IOException, XmlPullParserException 
{ 
    return MyEnum.valueOf(xpp.nextText()); 
} 

public void writeInstance(XmlSerializer xs, Object o) 
     throws IOException 
{ 
    xs.text(((MyEnum)o).name()); 
} 

public void register(SoapSerializationEnvelope sse) 
{ 
    sse.addMapping(sse.xsd, "MyEnum", MyEnum.class, MarshalEnum.getInstance()); 
} 
} // class 

Poi, quando si chiama il metodo in cui devono essere inviate MyEnum-Valori:

//... blah blah 
SoapSerializationEnvelope envelope = 
          new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.addMapping(SOAP_REMOTE_NAMESPACE, "MyEnum", MyEnum.class,  
        MarshalEnum.getInstance()); 
//... and so on. 

Nota che SOAP_REMOTE_NAMESPACE è lo spazio dei nomi del contratto di dati del enum da usare! Vedi il file wsdl per scoprirlo se non sei sicuro. Dovrebbe sembrare qualcosa come "http://schemas.datacontract.org/2009/08/Your.dotNet.Namespace".

Spero che questo funzioni anche per voi.

Problemi correlati