Проблема реализации метода WebInvoke = "POST" для службы REST в WCF - PullRequest
0 голосов
/ 10 сентября 2010

Привет всем и спасибо за ваше время заранее.

У меня проблема при попытке заставить работать метод REST в WCF. Метод POST, и я не могу получить значения, отправленные из запроса.

Так я объявляю службу в соответствии с примером от Microsoft о классе WebInvokeAttribute :

[OperationContract]
    [WebInvoke( 
        Method = "POST" ,
        BodyStyle = WebMessageBodyStyle.Bare ,
        UriTemplate = "/sum?x={x}&y={y}" , 
        ResponseFormat = WebMessageFormat.Xml )]
    ResponseData Sum( string x, string y );

Вот как я реализовал эту функцию в классе:

public ResponseData Sum( string x , string y )
    {
        ResponseData retorn = new ResponseData();

        int _x = 0;
        int _y = 0;

        try
        {
            _x = Convert.ToInt32( x );
            _y = Convert.ToInt32( y );

            retorn.Data = _x + _y + "";
        }
        catch ( Exception ex )
        {
            retorn.Data = "";
            retorn.Error = true;
            retorn.MsgError = ex.Message;
        }
        return retorn;
    }

ResponseData - это класс, реализующий DataContract:

[DataContract]
public class ResponseData
{
    private bool error = false;
    private string msgError = "";

    [DataMember]
    public string Data { get; set; }
    [DataMember]
    public bool Error
    {
        get
        {
            return error;
        }

        set
        {
            error = value;
        }
    }
    [DataMember]
    public string MsgError
    {
        get
        {
            return msgError;
        }

        set
        {
            msgError = value;
        }
    }
}

Как видите, довольно простой пример.

Дело в том, что это не работает. Параметры x и y функций всегда имеют значение null, не имеет значения, что я отправляю вместе с запросом, поэтому возвращаемое сообщение всегда:

<responsedata xmlns="http://schemas.datacontract.org/2004/07/RestServiceProvaCrypto" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><data>0</data><error>false</error><msgerror></msgerror></responsedata>

Итак, мой вопрос: что я делаю неправильно, так как не могу получить значения, переданные в запросе для x и y?

Я работаю с VS 2008 и .Net 3.5.

Опять же, спасибо за ваше время.

Рамон М. Галларт

1 Ответ

3 голосов
/ 23 декабря 2010

Я не знаю, насколько это вам поможет в данный момент, но, по моему мнению, вы используете неверную концепцию CRUD для вашей проблемы. Вы должны попытаться использовать атрибут WebGet и оставить свой UriTemplate таким же, как вы передают данные через строку запроса. Я бы предложил ..

[OperationContract]
[WebGet(
    BodyStyle = WebMessageBodyStyle.Bare ,
    UriTemplate = "/sum?x={x}&y={y}" , 
    ResponseFormat = WebMessageFormat.Xml )]
ResponseData Sum( string x, string y );

Надеюсь, это поможет ..

С уважением, ВВН

...