Как передать значение перечисления в wcf webservice

может ksoap2 передать перечисление в веб-сервис?

есть веб-сервис wcf:

[OperationContract]
string TestEnum(CodeType code);

CodeType - это перечисление dotnet:

    public enum CodeType
    {
        [EnumMember]
        ALL,

        [EnumMember]
        VehicleColor
    }

Как я могу вызвать этот веб-сервис wcf на клиенте Android?

я создаю перечисление CodeType и реализует KvmSerializable. Каково значение info.name (info.type) в методе getPropertyInfo?

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 = ?;

    }
}

Спасибо за вашу помощь.


person user730417    schedule 29.04.2011    source источник
comment
У меня такая же проблема, кто-нибудь решил это? Заранее спасибо!   -  person cbuck12000    schedule 02.06.2011
comment
@ cbuck12000: Не уверен, что ты получишь уведомление о моем ответе или нет, подумал, что я позабочусь о том, чтобы ты знал ...   -  person Simon Cowen    schedule 06.06.2011


Ответы (2)


Я только что решил эту проблему с перечислением через Marshal.

Я создал Java-Enum, "копирующий" .net. Затем я написал для него маршал-класс:

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

Затем при вызове метода, в который должны быть отправлены MyEnum-Values:

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

Обратите внимание, что SOAP_REMOTE_NAMESPACE - это пространство имен контракта данных используемого перечисления! См. Wsdl-файл, чтобы узнать об этом, если вы не уверены. Должно выглядеть примерно так: http://schemas.datacontract.org/2009/08/Your.dotNet.Namespace.

Я надеюсь, что это сработает и для вас.

person Fildor    schedule 29.11.2011

У тебя есть

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

а также

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

?

Изменить:

Немного поиска также нашло это, которое может быть полезно ...

person Simon Cowen    schedule 06.06.2011
comment
Думаю, моя проблема связана с KSoap2. Как отправить параметр значения перечисления в метод веб-службы или обработать свойство перечисления в классе, возвращаемом методом). Я могу сериализовать сложные объекты и тому подобное, но без перечислений ?? - person cbuck12000; 06.06.2011