将服务从WCF转换为ServiceStack Framework

时间:2011-11-02 10:37:58

标签: wcf servicestack

我开发了一个WCF应用程序,它作为数据库和我的Web应用程序之间的中间层。现在我的客户希望使用ServiceStack将此WCF转移到REST

我在GitHub上环顾四周,并尝试构建一个演示。我使用NuGet创建了一个启动模板,因此它包含一个Hello& Todo的例子。

  1. 如何将我的逻辑转换为基于对象(DTO)?因为我拥有大多数具有不同参数的函数,并将结果作为数据集返回。

  2. 如何在C#中创建客户端?我需要添加哪些参考?

  3. 当我使用NuGet添加启动模板后在IIS上托管示例应用程序时,我无法找到任何资源。当我需要在IIS上托管它时,是否需要执行特定设置?

1 个答案:

答案 0 :(得分:6)

如果您还没有这样做,请完成Creating REST Services with ServiceStack演示文稿。

1)如果您已经看过ServiceStack的Hello World示例,它会向您显示创建Web服务所需的唯一步骤就是提供:

//1. A Request DTO
public class Hello : IReturn<HelloResponse> { 
    public string Name { get; set; }
}

//2. A Response DTO
public class HelloResponse {
    public string Result { get; set; }
}

//3. The web service implementation that takes a Request DTO and returns a Response DTO
public class HelloService : Service
{
    public object Any(Hello request)
    {
        return new HelloResponse { Result = "Hello, " + request.Name };
    }
}

上面的示例显示了创建 Hello Web服务所需的所有代码。 您应该能够从WCF方法中重复使用大量现有类型和逻辑,并将其复制到 Any()方法中。

2)ServiceStack的一个好处是您不需要添加ServiceReference,即您可以为所有Web服务重复使用相同的通用服务客户端和DTO。 e.g:

//Using JSON:
IServiceClient client = new JsonServiceClient("http://localhost/path/to/servicestack");

//Using XML:
IServiceClient client = new XmlServiceClient("http://localhost/path/to/servicestack");

var response = client.Send(new Hello { Name = "Arun" });
Console.WriteLine("Received: " + response.Result); 

/ metadata 页面上,还有一个指向您的webservices WSDL 的链接,您可以根据需要创建生成的服务客户端。然而,这不是推荐的方法,因为它只需要使用现有的DTO就需要更多的摩擦力。

3)ServiceStack Web服务已经是一个ASP.NET应用程序,即ServiceStack只是一组IHttpHandler,您可以通过向网络添加a Web.config mapping来配置在普通的ASP.NET或MVC Web应用程序内运行应用程序Web.config。

基本上,您可以将ServiceStack Web服务视为普通的ASP.NET Web应用程序,实际上Hello World Tutorial向您展示了如何通过创建空的ASP.NET应用程序来实现此目的。

您可能还有兴趣查看The Starter Templates示例项目,这些项目向您展示了配置ServiceStack以在各种不同的托管选项中运行所需的最低设置,即ASP.NET / Windows服务/控制台应用程序等等。