其他可以执行 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.
我有一个 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.