【问题标题】:Where to start REST web service in C# or ASP.Net在 C# 或 ASP.Net 中从何处启动 REST Web 服务
【发布时间】:2009-07-21 03:21:08
【问题描述】:

我正在考虑开始编写一些 REST Web 服务作为提供数据的一种方式。我想当我的 REST Web 服务可用时,我的一些 Web 应用程序和控制台应用程序将能够使用 REST Web 服务作为数据服务来获取、添加、更新和删除数据库中的数据。除此之外,我想添加身份验证功能来识别任何请求。

我的问题是我应该从哪里开始?我看到了Microsoft ADO.Net Data Services。不确定这是否是一个好的起点?有没有可用的例子?

【问题讨论】:

  • 请问,出于兴趣,您为什么需要 ReST 来简单地公开您的数据库?你想解决什么场景?如果你只是想通过 xml 暴露 CRUD 数据,这就是所谓的 POX,与 ReST 的架构风格无关。
  • 一个例子是我们有一个数据库,它根据来自机器的连接调用按许可证收费。在一台机器内,拨打电话没有限制,但我们必须为来自其他电脑的电话付费。除此之外,网络防火墙是另一个问题。所以我认为 REST Web 服务可能是解决问题的最佳方式。我们可以调用 REST 服务,让 REST 服务建立一个连接或本地调用 db。
  • 那么您不是在谈论 ReST,而是在谈论简单的基于 http 的 xml 服务。痘!=休息。
  • @Murph:这个答案是在评论系统存在之前添加的。请在投票/评论之前检查发布日期。或者,将来,您可以将其标记为不是答案,而模组可以处理它。谢谢。
  • @Will 这个问题是在 09 年 7 月提出的,这篇 09 年 1 月的博客文章讨论了对评论系统的改进:blog.stackoverflow.com/2009/01/new-replies-notification 无论如何都自信地改变了......但是......跨度>

标签: c# rest


【解决方案1】:

查看REST in WCF MSDN sitestarter kit。好文章here也是。

【讨论】:

【解决方案2】:

您可能还想查看 servicestack.net 一个开源、跨平台、高性能的 Web 服务框架,让您可以使用代码优先、强类型 DTO 开发 Web 服务将自动(无需任何配置)立即在各种不同的端点上立即可用(即 XML、JSON、JSV、SOAP 1.1/1.2)。

开箱即用的 REST、RPC 和 SOAP

此外,您的相同 Web 服务也可以通过您选择的任何 REST-ful url 提供,其中首选的序列化格式可以由您的 REST 客户端指定,即

  • 使用 HTTP Accept: 标头
  • 将首选格式附加到查询字符串,例如?format=xml

请参阅Nothing but REST! Web 服务示例,了解如何使用 1 页 jQuery1 页 C# 开发完整的 REST-ful Ajax CRUD 应用程序。

Hello World example 是一个很好的起点,可以了解如何轻松地将 ServiceStack Web 服务添加到任何现有的 ASP.NET Web 应用程序中。

性能

出于性能方面的考虑,ServiceStack 与fastest JSON Serializer for .NET 捆绑在一起,是一款出色的 Ajax 服务器(比其他 JSON 序列化器快 3 倍以上)。

结帐this live Ajax app 体验一下(在 Linux/Nginx/MONO 上托管的现场演示)。

简单的罗斯文示例

ServiceStack 还可以轻松创建强类型无摩擦 Web 服务,只需以下代码即可返回客户 POCO 列表:

    public class CustomersService : RestServiceBase<Customers>
    {
            public IDbConnectionFactory DbFactory { get; set; }

            public override object OnGet(Customers request)
            {
              return new CustomersResponse { Customers = DbFactory.Exec(dbCmd =>
                    dbCmd.Select<Customer>()) 
            };
    }

在没有其他配置的情况下,您现在可以调用上述 web 服务 REST-完全返回所有:

在客户端访问网络服务

您可以使用您首选的通用 ServiceClient(即 Json、Xml 等)重新使用定义您的 Web 服务时使用的相同 DTO(即不需要代码生成)来调用上述 Web 服务。这允许您使用强类型 API 调用您的 Web 服务,只需 1 行代码:

C# 同步示例

IServiceClient client = new JsonServiceClient("http://host/service");
var customers = client.Send<CustomersResponse>(new Customers());

而且由于您的网络服务也是 REST 服务,它可以与 JavaScript ajax 客户端无缝协作,例如:

使用 jQuery

$.getJSON("http://host/service", function(r) { alert(r.Customers.length); });

【讨论】:

    【解决方案3】:

    ASP.NET Web API 现在是用于创建 RESTful 服务的 Microsoft 框架。

    http://www.asp.net/web-api

    【讨论】:

    • 不是唯一的框架。如果您仍然需要 WCF 的功能(例如同时具有 REST 和 SOAP 端点的单一服务),那么 WCF 就是您的最佳选择。
    【解决方案4】:

    如果您是 .net 世界的 REST 新手,请从 OpenRasta 开始。如果您努力工作,其他 Microsoft 解决方案可以执行 REST,但它们会引导您走一条路线,您很可能最终会通过 HTTP 使用 POD(普通旧数据)。这不是 REST 的全部意义所在。如果这就是你想要的,那也很酷,但它不是 REST。

    【讨论】:

    • 我不知道 OpenRasta 有这么多很酷的功能。我几乎可以肯定它是某种用于构建 ASP.NET MVC 网站的框架。谢谢!
    【解决方案5】:
    • 如果您要使用 WCF,JP 提到的 WCF REST Starter Kit 是一个很好的起点。
    • Omar Al Zabir provides a pretty good example 使用 ASP.NET MVC 提供可流利使用 XML 和 JSON 的 RESTful 服务
    • 您也可以采用您建议的 ADO.NET 数据服务路线。这些服务构建在 WCF 堆栈之上。

    我从未偶然发现任何关于如何在这些选项之间进行选择的非常好的指导。在 ASP.NET MVC 中,您承担了大部分管道负担,但也拥有最大的控制权。直接的 RESTful WCF 是一个快乐的中间地带,尽管 WCF 倾向于按照自己的方式完成事情。 ADO.NET 数据服务非常神奇,它的缺点是完全购买了生成这些服务的给定方法并失去了更多的灵活性。

    您可以阅读几本关于 .NET 的 RESTful 服务主题的好书。 O'Reilly 和 Microsoft Press 最近都发布了有关该主题的书籍。也许我能给你的最重要的建议是使用和理解几个开放的 RESTful 服务(例如 Twitter、Amazon、Flickr),以理解创建这些服务的设计决策。用户配置、身份验证机制和支持的内容类型(例如 JSON、XML、RSS/ATOM)是您可以观察到的一些决策,以帮助您创建服务 API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      相关资源
      最近更新 更多