在WCF REST服务中传递参数

本文关键字:参数 服务 WCF REST | 更新日期: 2023-09-27 18:08:11

我正在开发一个场景,其中我必须使用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}/"

还是有别的办法?

在WCF REST服务中传递参数

在这种情况下,您有两种方法。要么为"InsertData"方法创建重载函数,要么在你的函数中编写代码,只插入那些通过参数传递的值,而其他值则传递默认值。

下面是通过web浏览器(http)调用服务方法的示例

…localhost/pricedataservice DataService.svc/web/GetSnapshot ? = 1 = vod.l&象征使用nocache…

…localhost/pricedataservice DataService.svc/web/GetSnapshot ? =带象征…

 $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服务,那么它不是强制传递每个参数的值,但如果在你的项目中添加服务的引用,并通过服务对象调用你的服务方法,那么你就传递了所有的参数(这里,函数重载会帮助你)

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

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