WCF4.0–-RESTful WCF Services(1)(入門)
WCFはRESTの開発をよくサポートしているが、RESTfulのサービスは通常アーキテクチャの面で考慮されている.それは生まれつきとても良いプラットフォームをまたいで言語の集積能力を持っているため、ほとんどの言語とネットプラットフォームはHTTP要求をサポートして、複雑なクライアントエージェントを実現する必要はなくて、複雑なデータ通信方式を使う必要はなくて、私たちのサービスをいかなる必要とする人に暴露することができて、彼がVB、Ruby、JavaScriptを使っても、甚だしきに至ってはHTML FORMを使っても、または、ブラウザのアドレスバーに直接入力します.
WCFでは、WebGetAttribute、WebInvokeAttribute(GET/PUT/POST/DELETE)、UriTemplateによりRESTのサービスの呼び出しを定義し、WebMessageFormat(Xml/Json)によりメッセージングのフォーマットを定義する.
WCF 4.0で作成されたWCFサービスアプリケーションによるRESTサービスのリリースは簡単で、svcのMarkupにFactoryを追加するだけです.
<%@ ServiceHost Language="C#"Debug="true"Service="WcfRESTfulSvc1.TaskService"CodeBehind="TaskService.svc.cs"
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
%>
BTW:でも、これでWCFのMetadataはアクセスできなくなり、つまりsvcのwsdlにアクセスできなくなります.
Debugを使用してデバッグを開始するか、IISにパブリッシュします.
IISにパブリッシュするには、アプリケーションプールがaspに変更されることに注意してください.Net 4.0,そうでないと名詞が見つからないエラーOKを報告し,ブラウザに入力するhttp://localhost:2571/TaskService.svc/Tasks/Xml結果が得られます.
クライアントの呼び出しはSystemを利用する.Net.WebClientも簡単です.
var client = new WebClient(); this.txtResponse.Text = client.DownloadString(url);//このURLをお願いする
Jsonの戻り結果:[{"CreatedDate":"//Date(1299687080328+0800)//],"Detail":"Do Something 1","Title":"Task 1"},{"CreatedDate":"//Date(1299687080328+0800)//","Detail":"Do Something 2","Title":"Task 2"},{"CreatedDate":"//Date(1299687080328+ 0800)////////////////////////////////////////////////////////////////////////////////////////////////////////////////,『Detail』:『Do Something 3』,『Title』:『Task 3』},{『CreatedDate』:「//Date(1299687080328+0800)/」「Detail」:"Do Something 4","Title":"Task4"},{"CreatedDate":"//Date(1299687080328+0800)//","Detail":"Do Something 5","Title":"Task5"}]
jQueryを使用してこのサービスを呼び出す方法を見てみましょう.
WCFでは、WebGetAttribute、WebInvokeAttribute(GET/PUT/POST/DELETE)、UriTemplateによりRESTのサービスの呼び出しを定義し、WebMessageFormat(Xml/Json)によりメッセージングのフォーマットを定義する.
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
namespace WcfRESTfulSvc1
{
[ServiceContract]
public interface ITaskService
{
[OperationContract]
[WebGet(UriTemplate="Tasks/Xml", ResponseFormat=WebMessageFormat.Xml)]
List<Task> GetTasksXml();
[OperationContract]
[WebGet(UriTemplate = "Tasks/Json", ResponseFormat = WebMessageFormat.Json)]
List<Task> GetTasksJson();
[OperationContract]
[WebInvoke(UriTemplate="Task/{title}", Method="GET", ResponseFormat=WebMessageFormat.Json)]
Task GetTasksByTitle(string title);
}
[DataContract]
public class Task
{
[DataMember]
public string Title { get; set; }
[DataMember]
public string Detail { get; set; }
[DataMember]
public DateTime CreatedDate { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
namespace WcfRESTfulSvc1
{
public class TaskService : ITaskService
{
public List<Task> GetTasksXml()
{
return GetData();
}
public List<Task> GetTasksJson()
{
return GetData();
}
public Task GetTasksByTitle(string title)
{
return GetData().Where(t => t.Title == title).FirstOrDefault();
}
private static List<Task> GetData()
{
return new List<Task>
{
new Task { Title="Task1", Detail="Do Something 1", CreatedDate=DateTime.Now },
new Task { Title="Task2", Detail="Do Something 2", CreatedDate=DateTime.Now },
new Task { Title="Task3", Detail="Do Something 3", CreatedDate=DateTime.Now },
new Task { Title="Task4", Detail="Do Something 4", CreatedDate=DateTime.Now },
new Task { Title="Task5", Detail="Do Something 5", CreatedDate=DateTime.Now },
};
}
}
}
WCF 4.0で作成されたWCFサービスアプリケーションによるRESTサービスのリリースは簡単で、svcのMarkupにFactoryを追加するだけです.
<%@ ServiceHost Language="C#"Debug="true"Service="WcfRESTfulSvc1.TaskService"CodeBehind="TaskService.svc.cs"
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
%>
BTW:でも、これでWCFのMetadataはアクセスできなくなり、つまりsvcのwsdlにアクセスできなくなります.
Debugを使用してデバッグを開始するか、IISにパブリッシュします.
IISにパブリッシュするには、アプリケーションプールがaspに変更されることに注意してください.Net 4.0,そうでないと名詞が見つからないエラーOKを報告し,ブラウザに入力するhttp://localhost:2571/TaskService.svc/Tasks/Xml結果が得られます.
<ArrayOfTask xmlns="http://schemas.datacontract.org/2004/07/WcfRESTfulSvc1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Task>
<CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>
<Detail>Do Something 1</Detail>
<Title>Task1</Title>
</Task>
<Task>
<CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>
<Detail>Do Something 2</Detail>
<Title>Task2</Title>
</Task>
<Task>
<CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>
<Detail>Do Something 3</Detail>
<Title>Task3</Title>
</Task>
<Task>
<CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>
<Detail>Do Something 4</Detail>
<Title>Task4</Title>
</Task>
<Task>
<CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>
<Detail>Do Something 5</Detail>
<Title>Task5</Title>
</Task>
</ArrayOfTask>
クライアントの呼び出しはSystemを利用する.Net.WebClientも簡単です.
var client = new WebClient(); this.txtResponse.Text = client.DownloadString(url);//このURLをお願いする
Jsonの戻り結果:[{"CreatedDate":"//Date(1299687080328+0800)//],"Detail":"Do Something 1","Title":"Task 1"},{"CreatedDate":"//Date(1299687080328+0800)//","Detail":"Do Something 2","Title":"Task 2"},{"CreatedDate":"//Date(1299687080328+ 0800)////////////////////////////////////////////////////////////////////////////////////////////////////////////////,『Detail』:『Do Something 3』,『Title』:『Task 3』},{『CreatedDate』:「//Date(1299687080328+0800)/」「Detail」:"Do Something 4","Title":"Task4"},{"CreatedDate":"//Date(1299687080328+0800)//","Detail":"Do Something 5","Title":"Task5"}]
jQueryを使用してこのサービスを呼び出す方法を見てみましょう.
<mce:script type="text/javascript" language="JavaScript"><!--
$(document).ready(function () {
$("#btnGet").click(function () {
var url = $("#txtUrl").val();
$.get(url, function (data) {
for (var i = 0; i < data.length; i++)
$("#divResponse").append("<li>" +
data[i].Title + " - " +
data[i].Detail + "</li>");
});
});
});
// --></mce:script>