经过长时间学习WCF,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西。如果熟悉WCF,你一定知道WCF配置是位于system.serviceModel节点下。你会看到3个子节点:behaviors, serviceHostingEnvironment和serivces。
WCF配置子节点Services: 文件内已经有一个名为CatalogService的服务,实现服务的类名一致。在Service节点下,你可以看到Endpoint,它包含了服务的 ABCs:Address(地址), binding (绑定)和contract (协定).
◆Address: 你会发现地址是空的 ,不必担心,因为svc文件会作为基
◆Binding: webHttpBinding是WCF3.5提供的可以让服务以REST方式发布的新型绑定。这个绑定有两种模式,你可以通过特定的终结点行为来指定模式(通过设定behaviorConfiguration)
◆Contract: contract指定了WCF服务提供的功能。该属性被设为一个已经定义好的服务协定。要定义一个服务协定,你可以用ServiceContract修饰一个接口或者类。被ServiceContract修饰的接口或者类中,所有由OperationContract修饰的方法将被作为服务的操作暴露给客户。一般来说用接口做服务协定是更好的做法,这样做的好处是分离了协定与具体实现。但在我们使用的模板中却使用了类的方法,也就是说,接口是从类自动推断出来的(接口推断)。
◆BehaviorConfiguration: 对于webHttpBinding, 你需要将该属性设为一个拥有webHttp或enableWebScript子节点的终结点行为。
#T#F配置子节点Behaviors: 将behaviors加入到服务或者服务终结点的目的在于改变runtime的默认行为或者加入定制的扩展。你会发现我们使用的模板已经声明了一个名为 CatalogServiceAspNetAjaxBehavior的终结点行为. 该行为有一个enableWebScript 元素。enableWebScript是两种可能的终结点行为之一,另一种就是webHttp。事实上enableWebScript是webHttp用来提供AJAX 功能(比如生成客户端代理)的子类
WCF配置子节点ServiceHostingEnvironment: 跟ASP.Net运行的WCF服务的默认配置是让两者互不干扰 例如,ASP.NET runtime 不参与WCF请求的处理. WCF服务也不能使用ASP.NET context 和 session 这样的功能. 而我们这里的配置是将aspNetCompatibilityEnabled 设为true, 在这种设置下WCF请求就会加到ASP.Net 的请求流水线里了。
*要使WCF支持REST,只要在该配置文件中注意最重要的两点:1)binding应设为webHttpBinding 2) endpoint behavior要设定为webHttp或enableWebScript
- CatalogService.cs
- [ServiceContract(Namespace = "")]
- [AspNetCompatibilityRequirements(RequirementsMode =
- AspNetCompatibilityRequirementsMode.Allowed)]
- public class CatalogService
- {
- // Add [WebGet] attribute to use HTTP GET
- [OperationContract]
- public void DoWork()
- {
- // Add your operation implementation here
- return;
- }
- // Add more operations here and mark them with [OperationContract]
- }
在这里我们就真得做点儿事儿了。如果已经读了上面的内容,你应该已经注意到我们已经用接口推断的方法定义了的服务协定,就是说用ServiceContract属性修饰了一个类而不是一个接口。无论如何,我们要开始做一点儿实现了。***件事儿是设定ServiceContract属性的NameSpace参数。这一点非常重要。客户端用于调用WCF服务的代理的名字空间就是从这里拿的。