REST和WCF连接

时间:2010-02-17 02:46:18

标签: wcf rest

我特意寻找一个使用a)WCF&休息。经过长时间的谷歌搜索,虽然我得到了一些,但他们超出了我的理解。

有人可以给我一个非常简单的例子说“Hallow World”或2个数字的总和,这将使我对如何编写服务器有一个明确的见解,以及如何从客户端使用它。 / p>

此外,如果用简单的术语解释这种例子的任何好的链接,请告诉我。

谢谢

6 个答案:

答案 0 :(得分:4)

一旦你弄明白,WCF中的REST就不那么难了。

首先,你必须定义你的界面。

这是一个例子。

[ServiceContract]
public interface IRESTExample
{
    [WebGet(UriTemplate = "interaction/queue?s={site}", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
    [OperationContract]
    string QueueInteraction(string site);

    [WebGet(UriTemplate = "interaction/cancel?id={interactionId}", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
    [OperationContract]
    string CancelInteraction(string interactionId);

    [WebGet(UriTemplate = "queue/state?s={site}&q={queue}", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
    [OperationContract]
    string QueueState(string site, string queue);

}

您可以在WebGet中看到您定义的最终URL。所以它取决于你绑定它的位置,但是说你将端点绑定到www.example.com/rest

QueueInteraciton将是www.example.com/rest/interaction/queue?s=SomeSite

其中{stie}或{parameterName}替换为参数名称。

实现只是一个简单的类,我假设你知道如何实现一个接口。如果您需要帮助,请发表评论。

现在绑定端点。最后它并不难,您可以在配置中完成所有操作。

<system.serviceModel>
    <services>
        <service name="Stackoverflow.Example.Service.RestExample" behaviorConfiguration="MyServiceTypeBehaviors">
            <host>
                <baseAddresses>
                    <add baseAddress="http://localhost:2136/RestExample"/>
                </baseAddresses>
            </host>

            <endpoint address="rest" binding="webHttpBinding" behaviorConfiguration="xmlBehavior" contract="Stackoverflow.Example.Service.IRESTExample" />

        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="MyServiceTypeBehaviors" >
                <!-- Add the following element to your service behavior configuration. -->
                <serviceMetadata httpGetEnabled="true" />
            </behavior>
        </serviceBehaviors>

        <endpointBehaviors>
            <behavior name="jsonBehavior">
                <webHttp/>
            </behavior>
            <behavior name="xmlBehavior">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <bindings>
        <basicHttpBinding>
            <binding name = "NoSecurity">
                <security mode = "None" />
            </binding>
        </basicHttpBinding>
    </bindings>
</system.serviceModel>

现在启动服务并绑定它的代码。你可以在任何事情上做到这一点,例如控制台应用程序。

RestExample exampleService = new RestExample();

host = new ServiceHost(exampleService);

host.Open();

这应该足以开始。

答案 1 :(得分:2)

答案 2 :(得分:2)

David Basarab的回答是正确的,但是如果没有所有手动连接,有一种更简单的方法。特别是如果您已经习惯了经典的ASMX Web服务并且没有很多WCF经验,那么下面的方法很简单。

  1. 在Visual Studio 2010 Web项目中,添加对System.ServiceModel.Web
  2. 的引用
  3. 选择项目中的“添加新项目”。您想要的模板位于“Web”中,称为“支持AJAX的WCF服务”。不要选择香草“WCF服务”!如果你这样做,你必须自己做所有的web.config连线,大卫Basarab描述,这是一个痛苦。 “支持AJAX的WCF服务”为您完成了所有设置。根据需要为您的服务命名。
  4. 打开.svc文件。在类的[ServiceContract]属性中,使用您想要的任何内容填充Namespace字符串参数。
  5. 您将获得一个示例DoWork()方法和一堆注释,告诉您该如何处理该文件。获取RESTful API的技巧是向Web方法添加[WebGet()]属性。添加一个到DoWork()并验证一切功能。
  6. 因此,要调用DoWork()方法,您可以在浏览器中点击此方法: http://localhost/MyAjaxEnabledService.svc/DoWork

    现在让我们添加一个新的HelloWorld()方法,显示一些参数和输出。

    VB:

    <OperationContract()>
    <WebGet(ResponseFormat:=WebMessageFormat.Xml)>
    Public Function HelloWorld(ByVal name As String) As String
        WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml"
        Return String.Format("Hello, {0}!", If(String.IsNullOrWhiteSpace(name), "world", name))
    End Function
    

    C#:

    [OperationContract()]
    [WebGet(ResponseFormat=WebMessageFormat.Xml)]
    public string HelloWorld(String name) {
        WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
        Return String.Format("Hello, {0}!", String.IsNullOrWhiteSpace(name) ? "world" : name);
    }
    

    现在您可以访问:

    http://localhost/MyAjaxEnabledService.svc/HelloWorld?name=MattMc3

    有很多关于WCF的蹩脚和混乱的文档,特别是那些渴望简单的旧.ASMX风格的人。希望这有助于某人开始使用WCF。除了旧的ASMX风格之外,你可以用它做更多的事情,但是很难提升并且不会因为他们从ASMX过渡的不良帮助而气馁。您可以阅读有关快速和脏的RESTful WCF服务here的更多信息。

答案 3 :(得分:1)

如果您真的想要进行ReST,那么请使用一个网络框架,引导您走上正确的道路。见OpenRasta

让WCF做ReST并非不可能,要学会如何做一个经常妨碍你的框架并且导致你走向错误的方法很难。

答案 4 :(得分:0)

在Microsoft Web Developer中,您可以使用在线模板“WCF REST服务”。它将使用正确的web.config和global.asax文件为您设置项目。

答案 5 :(得分:-1)

您可以通过将端点配置为使用webHttpBinding来创建WCF REST Web服务,如本深入教程中所示:

http://www.west-wind.com/weblog/posts/310747.aspx

这是另一个open source web services framework,它简化了创建XML和JSON REST Web服务的过程,而无需任何额外配置。

编辑:添加了指向REST精神的好文章的链接:

http://tomayko.com/writings/rest-to-my-wife

链接到博客文章评论,解释常见的REST错误概念:

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven