其他可以执行 DTO 请求响应的技术,如 WCF

Other technologies that can perform DTO request response like WCF

我有一个 WCF 服务,允许我使用 DTO 发出请求并使用 DTO 回复 WPF 应用程序。例如,我为产品传递了一个过滤器对象,该对象具有一些我想要过滤的属性和一些用于分页的额外功能,(服务器将处理过滤器对象并获取数据)一个例子是这样的。

public async Task<ObservableCollection<ProductListItem>> GetProductList(ProductFilter filter, int startIndex, int pageSize, string sortBy)

我想知道除了 WCF 之外是否还有任何其他技术允许这样的操作,从我的初步研究来看,WebAPI 可能使用 GET、POST、PUT 动词和路由规则很不一样。

ServiceStack 看起来可以做到这一点,我可以在第 37 张幻灯片上看到 https://servicestack.net/features

它说。

List<Product> productOver2Bucks = client.Get(new FindProducts{PriceGreaterThan = 2})

这看起来很接近,但可能仍然需要 Rest 动词,因为它使用 Get()。

我不知道它是否是 FUD,但我一直在读到一些人认为 soap over WCF 是一种遗留技术,JSON 是未来的方式。那么是否有一种替代技术可以与我上面的方法签名一起使用?我可以从 Windows 通用应用程序等平台调用。

在 ServiceStack 中,如果您使用 Any 方法名称设计服务,例如

public object Any(Request request)
{
    return new Response { ... };
}

这将允许从任何格式或端点上的 Any HTTP 动词调用此服务(例如 JSON、XML、MsgPack、Protocol Buffers、SOAP 、消息队列等)。

此外,您无需为请求 DTO 定义任何 [Route],因为当 none 可用时,它会自动回退到使用 pre-defined Routes

public class Request : IReturn<Response> { ... }

public class Response { }

因此,通过上述服务,您可以使用 ServiceStack .NET ServiceClients 使用任何动词调用 API,例如:

var client = new JsonServiceClient(baseUrl);

Response response = client.Get(new Request { ... });

Response response = client.Post(new Request { ... });

如果愿意,您还可以使用异步 API,例如:

var response = await client.GetAsync(new Request { ... });

var response = await client.PostAsync(new Request { ... });

如果您不喜欢使用动词,您可以使用通用的 Send API,例如:

Response response = client.Send(new Request { ... });

仅在下面使用 POST,尽管强烈建议对 "read only" 查询使用 Get,因为它将允许服务 HTTP 响应被任何中间 HTTP 中间件缓存或代理。

添加 ServiceStack 引用

此外,如果您来自 WCF,您也会享受 ServiceStack 的 Add ServiceStack Reference which provides a number of advantages over WCF's Add Service Reference 功能,但仍然提供相同的实用程序,能够从远程 [=71] 生成类型化的 API =] 为:

有更多语言可供使用。

相对于 SOAP 的优势

虽然 ServiceStack 仍然为您的服务启用 WSDL,XSD,因此出于遗留兼容的原因,它们可以从 SOAP 1.1/1.2 端点调用 - 有一个 number of reasons why using clean HTTP and JSON/XML API's are preferred.