在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}/"
还是有别的办法?
在这种情况下,您有两种方法。要么为"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);