RESTful WCF

相较 WCF、WebService 使用 SOAP、WSDL、WS-* 而言,几乎所有的语言和网络平台都支持 HTTP 请求。我们无需去实现复杂的客户端代理,无需使用复杂的数据通讯方式既可以将我们的服务暴露给任何需要的人,无论他使用 VB、Ruby、JavaScript,甚至是 HTML FORM,或者直接在浏览器地址栏输入。

WCF 3.5 引入了 WebGetAttribute、WebInvokeAttribute、UriTemplate 来增加对 REST 的支持,这使得我们用很简单的方式就可以实现 RESTful WCF Service。

可参考以下几篇文章:

《深入浅出REST》 : 作者 Stefan Tilkov译者 苑永凯

《Web 编程模型》 : MSDN文档 《使用 WCF 和 .NET Framework 3.5 进行 HTTP 编程》 : Justin Smith

Twitter WCF Client

下面我们来看一个简单的例子:

[ServiceContract]
public interface IService
{
     [OperationContract]
     [WebGet]
     string EchoWithGet(string s); 
     [OperationContract]
     [WebInvoke]
     string EchoWithPost(string s);
} 
public class Service : IService
    {
        public string EchoWithGet(string s)
        {
            return "You said " + s;
        } 
        public string EchoWithPost(string s)
        {
            return "You said " + s;
        }
    } 
static void Main(string[] args)
       {
           AppDomain.CreateDomain("Server").DoCallBack(delegate
           {
               ServiceHost host = new ServiceHost(typeof(Service),new Uri("http://localhost:8020"));
               host.AddServiceEndpoint(typeof(IService), new BasicHttpBinding(), "Soap");
               ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(IService), new WebHttpBinding(), "Web");
               endpoint.Behaviors.Add(new WebHttpBehavior()); 
               host.Open();
           });
           using (WebChannelFactory<IService> wcf = new WebChannelFactory<IService>(new Uri("http://localhost:8020/Web")))
           {
               IService channel = wcf.CreateChannel(); 
               string s; 
               Console.WriteLine("Calling EchoWithGet by HTTP GET: ");
               s = channel.EchoWithGet("Hello, world");
               Console.WriteLine("   Output: {0}", s); 
               Console.WriteLine("");
               Console.WriteLine("This can also be accomplished by navigating to");
               Console.WriteLine("http://localhost:8020/EchoWithGet?s=Hello, world!");
               Console.WriteLine("in a web browser while this sample is running."); 
               Console.WriteLine(""); 
               Console.WriteLine("Calling EchoWithPost by HTTP POST: ");
               s = channel.EchoWithPost("Hello, world");
               Console.WriteLine("   Output: {0}", s);
           }
           Console.ReadLine();
       }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木宛城主

SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用

由于项目的需要,登录SharePoint Application的用户将从一个统一平台中获取,而不是从Domain中获取,所以需要对SharePoint Ap...

2389
来自专栏ASP.NET MVC5 后台权限管理系统

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(13)-系统日志和异常的处理③

上一节我们讲了如何捕获异常和记录日志,这一节我们讲,没有捕获的或者忘记捕获的异常包括404错误等,我们统一处理这个异常。 这一讲是利用 Application_...

3028
来自专栏技术之路

lock小记

都快把lock忘了用wcf 给手持设备做服务的时候可能会有并发操作但又忘了lock的使用情况 做个小例子,怕自己再忘了 不加lock的时候 结果可能 是负的下面...

1956
来自专栏乐沙弥的世界

不可或缺的 sendEmail

    还在为Linux下没有便捷的邮件程序苦恼,还在为复杂的邮件服务器架设Google N多网页? 对于小型,便捷的Linux下命令行邮件程序,sendEma...

882
来自专栏草根专栏

用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传

这部分就讲从angular5的客户端上传图片到asp.net core 2.0的 web api. 这是需要的源码: https://pan.baidu.com...

4085
来自专栏菩提树下的杨过

"RDLC"报表-参数传递及主从报表

今天继续学习RDLC报表的“参数传递”及“主从报表” 一、先创建DataSet,如下图: ? 二、创建一个报表rptDEPT.rdlc,显示部门T_DPET的数...

2686
来自专栏晓晨的专栏

.NET Core 开源工具 IPTools - 快速查询 IP 地理位置、经纬度信息

快速查询中国IP地址信息,包含国家、省份、城市、和网络运营商。非中国IP只支持查询国家。

961
来自专栏C#

C#的网络适配器操作

     网络的相关设置在项目开发中有较多的应用,有时候需要在项目中对网络信息进行相关设置。      现在提供提供几种相关的辅助方法类。 (1).IP地址 ...

2067
来自专栏菩提树下的杨过

利用fluorineFx将DataTable从.Net传递到Flash

FluorineFx自带的示例都不错,就是有点不简洁,下面的代码基本上已经最简版了(环境vs2010) 1、先创建一个Web Application,然后添加F...

2415
来自专栏跟着阿笨一起玩NET

ASP.NET通过http/https的POST方式,发送和接受XML文件内容

 本文转载:http://hi.baidu.com/ysyhyt/item/5011ae39ce3cf49fb80c0395

4781

扫码关注云+社区

领取腾讯云代金券