快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡新京返水:我的WCF4 Rest Service及Entity Framework with POCO之旅(一)——创建一个基本的RESTful Service



照理说,首先应先容什么是REST,它是怎么呈现的,有什么上风,什么历史意义。不过我不多想讲,也讲不清楚。简而言之,REST最核心的观点是“资本”,一个uri代表一个特定的资本,而客户端经由过程HTTP method GET, POST, PUT, DELETE来和资本交互(同时导致状态转移)。至于资本的体现形式,则以XML和JSON为主。为什么要用REST? 自己想去吧。

创建项目

闲话说完,现在开初创建项目。应用Online Templates中的WCF REST Service Template是一个对照轻易的措施:

项目创建好后,我们可以看到项目中已经有下面这些文件:

Service1便是一个WCF Service,和曩昔的WCF Service不合,这里的Service既不是一个.svc文件,也没有专门定义一个接口作为ServiceContract。

SampleItem便是我们以往所知的DataContract,不过现期近使不加DataContract attribute,也没有关系。

对照特其余是Global.asax和Global.asax.cs。Global.asax.cs中定义了Routes:

private void RegisterRoutes()

{

// Edit the base address of Service1 by replacing the "Service1" string below

RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(), typeof(Service1)));

}

表示所有造访HOST/Service1的哀求都要由Service1这个类来处置惩罚。再看一下Service1的定义澳门新葡新京返水,此中有个措施澳门新葡新京返水是:

[WebGet(UriTemplate = "{id}")]

public SampleItem Get(string id)

{

// TODO: Return the instance of SampleItem with the given id

throw new NotImplementedException();

}

这表示对付HOST/Service1/123的GET哀求,将会用这个Get(string)措施来处置惩罚。办事运行时,WCF根据uri中的“Service1”根据前面指定的Route找到Service1这个办事类,再根据UriTemplate,将“123”赋给名为id的参数,其结果便是Get措施以参数“123”被调用了。

现在我们改动一下这个措施,让它能够返回结果:

[WebGet(UriTemplate = "{id}")]

public SampleItem Get(string id)

{

return new SampleItem

{

Id = int.Parse(id),

StringValue = string.Format("The id is {0}.", id)

};

}

然后启动这个办事。在浏览器地址栏中输入“http://localhost:6421/Service1/123”(端口号根据实际环境而定),结果如下:

若何,是不是很简单?

不过现在的RESTful办事还只能读取资本,WebGet只支持GET措施,要支持PUT, POST和DELETE,必要应用WebInvoke attribute。而且,现在的办事看不出任何实际意义。

既然掌握了基础技巧,我们来创建一个轻细有点实际意义的办事

创建一个简略单纯微博办事

(终于不是做图书治理系统示例了)

首先,我们的微博办事真的很简单,简单到只能有一个用户自娱自乐,而且还只能发翰墨,是不是有点无聊?不过不要急,一步一步来。

既然如斯,所谓的微博办事,也便是一个微博治理系统了(…)。它应该有这些功能:

宣布微博

查看已宣布的微博

删除一条微博

照此删去本来那些示例代码,从新编写代码如下:

MicroblogService.cs

using System;

using System.Collections.Concurrent;

using System.Collections.Generic;

using System.Linq;

using System.Se澳门新葡新京返水rviceModel;

using System.ServiceModel.Activation;

using System.ServiceModel.Web;

using System.Threading;

namespace WcfRestServiceDemo.Service

{

[Service澳门新葡新京返水Contract(Namespace = "WcfRestServiceDemo")]

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

public class MicroblogService

{

private static int _currentId;

private static readonly Concur澳门新葡新京返水rentDictionaryint, Microblog> _microblogs =

new ConcurrentDictionaryint, Microblog>();

[WebGet(UriTemplate = "")]

public ListMicroblog> GetCollection()

{

return _microblogs.Values.ToList();

}

[WebInvoke(UriTemplate = "", Method = "POST")]

public Microblog Create(Microblog microblog)

{

microblog.Id = Interlocked.Increment(ref _currentId);

microblog.PublishTime = DateTime.Now;

_microblogs.TryAdd(microblog.Id, microblog);

return microblog;

}

[WebGet(UriTemplate = "{id}")]

public Microblog Get(string id)

{

return _microblogs[int.Parse(id)];

}

[WebInvoke(UriTemplate = "{id}", Method = "DELETE")]

public void Delete(string id)

{

Microblog microblog;

_microblogs.TryRemove(int.Parse(id), out microblog);

}

}

}

Microblog.cs

using System;

using System.Runtime.Serialization;

namespace WcfRestServiceDemo.Service

{

[DataContract(Namespace = "WcfRestServiceDemo")]

public class Microblog

{

[DataMember]

public int Id { get; set; }

[DataMember]

public string Content { get; set; }

[DataMember]

public DateTime PublishTime { get; set; }

}

}Global.asax.cs

using System;

using System.ServiceModel.Activation;

using System.Web;

using System.Web.Routing;

namespace WcfRestServiceDemo.Service

{

public class Global : HttpApplication

{

private void Application_Start(object sender, EventArgs e)

{

RegisterRoutes();

}

private void RegisterRoutes()

{

RouteTable.Routes.Add(new ServiceRoute("microblogs", new WebServiceHostFactory(), typeof (MicroblogService)));

}

}

}

编译并运行。首先造访http://localhost:6421/microblogs/@all:

您可能还会对下面的文章感兴趣: