jQuery呼び出しRESTful WCF例(GETメソッド/POSTメソッド)
10524 ワード
くだらないことを言わないで、テーマに直行しましょう.
wcf端子:
近年流行しているrestfulは、ajaxに呼び出されるようにするとともに、restfulスタイルのuriをサポートするために、Ajax-enabled Wcf Serviceを作成した後、svcファイルを手動で変更し、Factoryを指定する必要があります.
<%@ ServiceHost Language="C#"Debug="true"Service="ajaxSample.HelloWorld"CodeBehind="HelloWorld.svc.cs"Factory="System.ServiceModel.Activation.WebServiceHostFactory"%>
注意:Factoryを追加しないと、wcfはhttp://localhost/helloWorld.svc/Hello/person/nameのようなrestfulで直接アクセスできません.
同時にwebも削除します.configのは類似しています.
さて、コードの書き込みを開始します.wcf呼び出しにはGET/POSTの2つの方法があります.次に、いくつかの一般的な状況を例に挙げてみましょう.
jQuery呼び出しコード:
WCF曝露の方法では、ユーザ名/ユーザIDなどの機密情報をパラメータとして使用する必要がある場合があります.この場合、jsでwcfを呼び出すと、クライアントにこの情報が漏れる可能性があります.このようなシーンでは、サービス側のashxで中継することもよくあります.
TestService.svc
AjaxProcess.ashx
jQuery呼び出し:
サンプルコード:
http://files.cnblogs.com/yjmyzz/jquery_ajax_wcf_rest.zip
wcf端子:
近年流行しているrestfulは、ajaxに呼び出されるようにするとともに、restfulスタイルのuriをサポートするために、Ajax-enabled Wcf Serviceを作成した後、svcファイルを手動で変更し、Factoryを指定する必要があります.
<%@ ServiceHost Language="C#"Debug="true"Service="ajaxSample.HelloWorld"CodeBehind="HelloWorld.svc.cs"Factory="System.ServiceModel.Activation.WebServiceHostFactory"%>
注意:Factoryを追加しないと、wcfはhttp://localhost/helloWorld.svc/Hello/person/nameのようなrestfulで直接アクセスできません.
同時にwebも削除します.configの
さて、コードの書き込みを開始します.wcf呼び出しにはGET/POSTの2つの方法があります.次に、いくつかの一般的な状況を例に挙げてみましょう.
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
namespace ajaxSample
{
[ServiceContract(Namespace = "http://yjmyzz.cnblogs.com/")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class HelloWorld
{
/// <summary>
/// Post Restful
/// </summary>
/// <param name="person"></param>
/// <param name="welcome"></param>
/// <returns></returns>
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "PostRestfulTest/{person}/{welcome}", ResponseFormat = WebMessageFormat.Json)]
public List<string> PostRestfulTest(string person,string welcome)
{
List<string> result = new List<string>();
result.Add("PostRestfulTest -> from server:");
result.Add(person);
result.Add(welcome);
return result;
}
/// <summary>
/// Get Restful
/// </summary>
/// <param name="person"></param>
/// <param name="welcome"></param>
/// <returns></returns>
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "GETRestfulTest/{person}/{welcome}", ResponseFormat = WebMessageFormat.Json)]
public List<string> GETRestfulTest(string person, string welcome)
{
List<string> result = new List<string>();
result.Add("GETRestfulTest -> from server:");
result.Add(person);
result.Add(welcome);
return result;
}
/// <summary>
/// Get Post Restful
/// </summary>
/// <param name="person"></param>
/// <param name="welcome"></param>
/// <returns></returns>
[OperationContract]
[WebInvoke(Method = "*", UriTemplate = "RestfulTest/{person}/{welcome}", ResponseFormat = WebMessageFormat.Json)]
public List<string> RestfulTest(string person, string welcome)
{
List<string> result = new List<string>();
result.Add("RestfulTest -> from server:");
result.Add(person);
result.Add(welcome);
return result;
}
/// <summary>
/// Post ( :Post ,BodyStyle WrappedRequest Wrapped)
/// </summary>
/// <param name="person"></param>
/// <param name="welcome"></param>
/// <returns></returns>
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.WrappedRequest)]
public List<string> PostTest(string person, string welcome)
{
List<string> result = new List<string>();
result.Add("PostRestfulTest -> from server:");
result.Add(person);
result.Add(welcome);
return result;
}
/// <summary>
/// Get
/// </summary>
/// <param name="person"></param>
/// <param name="welcome"></param>
/// <returns></returns>
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]
public List<string> GETTest(string person, string welcome)
{
List<string> result = new List<string>();
result.Add("GETTest -> from server:");
result.Add(person);
result.Add(welcome);
return result;
}
}
}
jQuery呼び出しコード:
<script type="text/javascript">
$().ready(function () {
$.post("HelloWorld.svc/PostRestfulTest/111/222", function (data) {
alert("PostRestfulTest , :" + data);
})
$.get("HelloWorld.svc/GETRestfulTest/333/444", function (data) {
alert("GETRestfulTest , :" + data);
})
$.get("HelloWorld.svc/RestfulTest/555/666", function (data) {
alert("RestfulTest GET , :" + data);
})
$.post("HelloWorld.svc/RestfulTest/777/888", function (data) {
alert("RestfulTest POST , :" + data);
})
$.get("HelloWorld.svc/GETTest", { person: "aaa", welcome: "bbb" }, function (data) {
alert("GETTest , :" + data);
});
$.ajax({
url: "HelloWorld.svc/PostTest",
type: "POST",
contentType: "application/json",
data: '{"person":"ccc","welcome":"ddd"}',
dataType: "html",
success: function (data) { alert("PostTest , :" + data); }
});
})
</script>
WCF曝露の方法では、ユーザ名/ユーザIDなどの機密情報をパラメータとして使用する必要がある場合があります.この場合、jsでwcfを呼び出すと、クライアントにこの情報が漏れる可能性があります.このようなシーンでは、サービス側のashxで中継することもよくあります.
TestService.svc
using System.ServiceModel;
namespace ashx_jQuery
{
[ServiceContract]
public class TestService
{
/// <summary>
///
/// </summary>
/// <param name="userId"></param>
/// <param name="month"></param>
/// <returns></returns>
[OperationContract]
public double GetSalary(int userId,int month)
{
if (month == 1)//
{
return 5000;
}
else
{
return 1000;
}
}
}
}
AjaxProcess.ashx
using System.Web;
namespace ashx_jQuery
{
/// <summary>
/// Summary description for AjaxProcess
/// </summary>
public class AjaxProcess : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string month = context.Request["month"];
TestService wcf = new TestService();
double salary = wcf.GetSalary(GetUserId(), int.Parse(month));
context.Response.Write("{salary:" + salary + "}");
}
/// <summary>
/// ID
/// </summary>
/// <returns></returns>
private int GetUserId()
{
return 1;
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
jQuery呼び出し:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="ashx_jQuery._default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>jQuery ashx Sample</title>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
$().ready(function () {
$("#btnTest").click(function () {
$.post(
"AjaxProcess.ashx",
{ month:1 },
function (e) {
var d = eval("(" + e + ")");
alert(d.salary);
}, "html");
})
})
</script>
</head>
<body>
<form id="form1" runat="server">
<input type="button" value="GetSalary" id="btnTest"/>
</form>
</body>
</html>
サンプルコード:
http://files.cnblogs.com/yjmyzz/jquery_ajax_wcf_rest.zip