WCF Restful Service
对 Web Services、WCF 和 Restful 的扫盲可参见:https://www.cnblogs.com/scy251147/p/3382436.html
关于之前对 WCF 的学习,可参见:WCF | wjcx_sqh;
首先,对 Restful Service 作简单的了解
- 创建分布式超文本媒体的一种架构方式
- 独立于任何技术、平台,面向资源 Resource-Oriented Architecture (ROA)
- 通过标准的HTTP(GET,POST,PUT,DELETE)操作来定义资源
- 通过 Uniform Resource Identifier(URI)发布资源
首先,定义服务,简单之
[ServiceContract(Name = "user")]
public interface IServiceWCF
{
[OperationContract]
[WebInvoke(Method = "GET",
UriTemplate = "getUser/{name}",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
UserData GetUserData(string name);
} [AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ServiceWCF : IServiceWCF
{
public UserData GetUserData(string name) {
//服务接口方法实现
}
}
其中,AspNetCompatibilityRequirements 指示该服务能否在 ASP.NET 兼容模式下运行,也可以加上
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
用于指示说明服务端只会存在这类的一个实例。服务定义完成后,需要更新配置文件 Web.Config
<system.serviceModel>
<services>
<service name="RestfulWcf.ServiceWCF" behaviorConfiguration="defaultServiceBehavior">
<endpoint address="" binding="webHttpBinding" contract="RestfulWcf.IServiceWCF"
behaviorConfiguration="defaultEndpointBehavior"></endpoint>
</service>
</services> <behaviors>
<serviceBehaviors>
<behavior name="defaultServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
<behavior name="defaultServiceBehaviorHttps">
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors> <endpointBehaviors>
<behavior name="defaultEndpointBehavior">
<webHttp helpEnabled="true" automaticFormatSelectionEnabled="true" />
<dataContractSerializer maxItemsInObjectGraph="6553500"/>
</behavior>
</endpointBehaviors>
</behaviors> <protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
同时,新增 Global.asax 全局资源文件,用于定义注册路由
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
RegistrRoutes();
} private void RegistrRoutes()
{
//ServiceRoute需要显式引用 System.ServiceModel.Activation.dll
RouteTable.Routes.Add(
new ServiceRoute("user", new WebServiceHostFactory(), typeof(ServiceWCF)));
}
}
最后,可 Service.svc直接右键运行,也可部署至 IIS
项目-属性,生成路径应为bin目录,IIS部署时,网站路径指向该路径即可
通过该路径可以查看该服务接口发布的方法
http://localhost:18800/user/help
若在调用PUT或DELETE方法时出现 Status:405 Method Not Allowed 问题,在 web.config中 system.webServer节点添加如下配置
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
详细配置过程,参见(推荐): WCF RESTFul 服务搭建;
参考
关于如何配置 https 的访问参见:http://www.cnblogs.com/mingmingruyuedlut/p/4236035.html
需要分别在 serviceModel和 services中添加 https配置
<bindings>
<webHttpBinding >
<binding name="SecureWebBinding" >
<security mode="Transport">
<transport clientCredentialType="None"></transport>
</security>
</binding>
</webHttpBinding>
</bindings> <endpoint address="" binding="webHttpBinding"
bindingConfiguration="SecureWebBinding"
contract="RestfulWcf.IServiceWCF"
behaviorConfiguration="defaultEndpointBehavior"/>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
不要忘记在 IIS中为该服务绑定 443端口即可。
注:
Restful WCF Service 已经是过时的技术,推荐进一步学习 WebApi,具体参见:C# - MVC WebApi | wjcx_sqh;
WCF Restful Service的更多相关文章
- 构建基于WCF Restful Service的服务
前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添加服务端引用才能使用(虽然看到网络上已经提供了这方面的Dynamic Proxy,但是没有这种方式简便), ...
- WCF Restful Service的服务
构建基于WCF Restful Service的服务 前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添加服务端引用才能使用(虽然看到网络上已经提供了这方面 ...
- WCF Restful Service Get / Post请求
Rest 它是用于创建分布式超文本媒体的一种架构方式,我们可以通过标准的HTTP(GET,POST,PUT,DELETE)操作来构建基于面向资源的软件架构方式(Resource-Oriented Ar ...
- [转]构建基于WCF Restful Service的服务
本文转自:http://www.cnblogs.com/scy251147/p/3566638.html 前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添 ...
- Wcf Restful Service服务搭建
目的 使用Wcf(C#)搭建一个Restful Service 背景 最近接到一个项目,客户要求使用Restful 方式接收到数据,并对数据提供对数据的统计显示功能,简单是简单,但必须要使用Restf ...
- [转]WCF RESTful service and WebGrid in ASP.NET MVC 5
使用WebClient调用WCF服务 流程:从View获取实体类-->序列化-->写入内存流中-->传给远端的WCF服务 Get.POST.PUT.DELETE,客户端以流的方式调用 ...
- 在IIS8.5的环境下配置WCF的Restful Service
今天在客户的环境中(Windows Server 2012 R2 + IIS 8.5)搭建Call WCF Restful Service的功能,发现了几个环境配置的问题,记录如下: 1):此环境先安 ...
- TinyFrame升级之十:WCF Rest Service注入IOC的心
由于在实际开发中,Silverlight需要调用WebService完成数据的获取,由于之前我们一直采用古老的ASMX方式,生成的代理类不仅难以维护,而且自身没有提供APM模式的调用方式,导致在Sin ...
- [经验] - JQuery.Ajax + 跨域 (crossDomain) + POST + JSON + WCF RESTful, 5大陷阱和解决方案
最近在开发WSS RESTful服务的时候, 碰到了这些个纠结的问题. 在网上查找了半天, 找到n多种解决方案, 但是都是部分的, 要么是没有跨域的情况, 要么是没有post的情况, 要么不是用WCF ...
随机推荐
- Qt编写数据可视化大屏界面电子看板13-基础版
一.前言 之前发布的Qt编写的可视化大屏电子看板系统,很多开发者比较感兴趣,也收到了很多反馈意见,纵观市面上的大屏系统,基本上都是B/S结构的web版本,需要在后台进行自定义配置模块,绑定数据源等,其 ...
- Linux记录-centos升级python3
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel -yyum install xz -ywget https://www.p ...
- ArrayList数组操作
String字符类型的操作方法 public static void main(String[] args) { // ArrayList ArrayList<String> list = ...
- Spring Boot 使用MockMvc对象模拟调用Controller
功能实现之后,我们要养成随手写配套单元测试的习惯,这在微服务架构中尤为重要.通常,我们实施微服务架构的时候,已经实现了前后端分离的项目与架构部署.那么在实现后端服务的时候,单元测试是在开发过程中用来验 ...
- 2019年Java面试题基础系列228道(5)
21.存在两个类,B 继承 A,C 继承 B,我们能将 B 转换为C 么?如 C = (C) B: 这属于强制类型转换,如果被转换的B实例不是C类型,会有异常 比如你的ABC分别对应动物,猫,黑猫. ...
- 常见问题:计算机网络/运输层/UDP
几乎不对IP增加其他东西,无连接. 优势 速度快.适合实时. 无连接建立,没有连接时延. 无连接状态. 分组首部开销小.TCP需20字节,UDP仅需8字节. 使用UDP的协议 DNS SNMP RIP ...
- asp.net编程基础
vs常用两个快捷键:打开即时窗口 ctrl+alt+i : 快速代码格式排版:ctrl+k+d 一:Page:页面 Page.IsPostBack 判断页面是否第一次加载用 if(Page.IsPo ...
- sudo权限配置
首先要禁止root的用户登录ssh 在ssh配置文件里面把root用户no掉,一般公司不允许用第三方软件直接root登陆. 一.linux给用户添加sudo权限: 有时候,linux下面运行sudo ...
- PHP中的重载技术
PHP中的重载技术 通常面向对象语言的重载技术 其基本语法是这样的: 在一个类中,有多个同名的方法,每个方法的参数不同而已.这种现象就称为“重载”. 参数不同可以是:数量个数不同,或类型不同,或顺序不 ...
- Copy-On-Write技术
通俗的解释,假定多方需要使用同一个资源时,没有必要为每一方都创建该资源的一个完整的副本,反而令多方共享这个资源,当某方需要修改资源的某处时,利用引用计数,把该处复制一个副本,再把跟新的内容写入该副本中 ...