在WCF REST服务中传递参数

时间:2014-06-12 04:42:20

标签: c# wcf rest

我正在开发一个场景,我必须使用WCF Rest服务在xml文件中插入记录。

我的界面:

namespace WcfService1
{   
    [ServiceContract]
    public interface IService1
    {
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/InsertData/")]
    string InsertData(string Name, string Email, string Category, string Mobile, string Message);
    }   
}

我的班级:

public string InsertData(string Name, string Email, string Category, string Mobile, string Message)
    {
        string file = AppDomain.CurrentDomain.BaseDirectory + "\\DataFile.xml";

        DataTable dtUser = ReadXML(file);

        DataRow dr = dtUser.NewRow();
        dr["Name"] = Name;
        dr["Email"] = Email;
        dr["Category"] = Category;
        dr["Mobile"] = Mobile;
        dr["Message"] = Message;
        dtUser.Rows.Add(dr);
        dtUser.WriteXml(file);
        return "Success";           
    }
    public DataTable ReadXML(string file)
    {
        //create the DataTable that will hold the data
        DataTable table = new DataTable("User");
        //create the table with the appropriate column names
        table.Columns.Add("Name", typeof(string));
        table.Columns.Add("Email", typeof(string));
        table.Columns.Add("Category", typeof(string));
        table.Columns.Add("Mobile", typeof(string));
        table.Columns.Add("Message", typeof(string));
        try
        {
            //open the file using a Stream
            if (File.Exists(file))
            {
                using (Stream stream = new FileStream(file, FileMode.Open,
                FileAccess.Read))
                {
                    //use ReadXml to read the XML stream
                    table.ReadXml(stream);
                    //return the results
                }
            }
            return table;
        }
        catch (Exception ex)
        {
            return table;
        }
    }

现在是否有必要在浏览器URL中传递所有这些参数,如下面的代码所示:

UriTemplate = "/InsertData/{Name}/{Email}/{Category}/{Mobile}/{Message}/"

或者有什么办法吗?

1 个答案:

答案 0 :(得分:1)

在这种情况下,你有两种方式。为“InsertData”方法或函数编写代码创建重载功能,只插入通过参数传递的值和其他值传递默认值。

以下是通过网络浏览器(http)

的呼叫服务方法示例

...本地主机/ pricedataservice / DataService.svc /网络/ GetSnapshot符号= VOD.L&安培;非缓存= 1 ...

OR

...本地主机/ pricedataservice / DataService.svc /网络/ GetSnapshot?符号= VOD.L ...

 $j.ajax({
        cache: false,
        url: URL,
        data: "{}",
        type: "GET",
        async: false,
        //jsonpCallback: "Success",
        contentType: "application/json",
        dataType: "json",
        error: function (request, error) {
            alert("GetDividendData - " + error);
        },
        success: function (data) {

        }
    });

如果您通过HTTP(Web浏览器)调用WCF服务,则不必为每个参数传递值,但如果在项目中添加服务引用并通过服务对象调用服务方法,则您已传递所有参数(此处,函数重载会帮助你)

以下是通过在项目中添加服务引用来调用服务方法的示例

DataService.DataServiceClient objDataServiceClient = new DataService.DataServiceClient();
//Get data from service
objSnapshotData = objDataServiceClient.GetSnapshot(ticker, nocache);