我正在开发一个场景,我必须使用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}/"
或者有什么办法吗?
答案 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);