问题在WCF上为REST服务实现WebInvoke方法=“POST”

时间:2010-09-10 13:52:52

标签: c# .net-3.5 rest

大家好,感谢您的提前时间。

我在尝试在WCF下运行REST方法时遇到问题。该方法是POST,我无法检索从请求发送的值。

这就是我根据微软关于WebInvokeAttribute Class的例子声明服务的方式:

[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;
        }
    }
}

如您所见,这是一个非常简单的例子。

事情是它不起作用。函数的Tha 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。

再次,谢谢你的时间。

Ramon M. Gallart

1 个答案:

答案 0 :(得分:3)

我不知道这对你有多大帮助,但据我说你正在为你的问题调用错误的CRUD概念。你应该尝试使用WebGet属性并保持你的UriTemplate相同,事实上你通过查询字符串传递数据。 我建议..

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

希望这会有所帮助..

此致 Vvn核酸