Signalata周围的OData包装器

时间:2014-08-06 13:58:31

标签: c# asp.net web-services signalr odata

这看起来有点疯狂,但在阅读关于OData时,我遇到了一些声称可以将工厂运行的文章WCF Web服务可以作为OData端点公开(通过一些黑魔法或其他)。

问题是,使用OData端点公开SignalR Web服务可能是切实可行的。这是否可以与当前可用的框架一起使用? SignalR服务用于从称为“提供者”的连接客户端之一提取数据,多个消费客户端可以从中提供数据。

修改

我为每种类型的实体设置了一组现有的SignalR集线器(或者就OData而言资源),并且这些Hubs中的每一个都以类似于{的方式公开方法{1}}例如。

Repository

希望这与public class CustomersHub : Hub { public IEnumerable<CustomerData> GetCustomers( ) public IEnumerable<CustomerData> GetCustomers(IEnumerable<int> ids); // with odata this method may not be necessary. public IEnumerable<CustomerData> FindCustomersByName(IEnumerable<string> names); /// ... } 派生类有惊人的相似之处。在这种情况下,ODataController资源

WCF Data Service Toolkit 中为 WCF数据服务实现了与我要求的非常相似的东西,其中AFAIK不再有效,加上我'我试图用SignalR做到这一点。

如果您问我为什么使用SignalR进行此类服务,那是因为数据不驻留在Web服务所托管的服务器上,连接到Web Service的某些客户端具有该数据。在方法内部是调用另一个客户端(除Hubs之外)发送数据请求。

1 个答案:

答案 0 :(得分:2)

来自the official OData specification(简介):

开放数据协议(OData)支持创建基于REST的数据服务,允许资源,使用统一资源定位器< / strong>(URL)并在数据模型中定义,由Web客户端使用简单的HTTP消息发布和编辑。该规范定义了协议的核心语义和行为方面。

这些特征都没有映射到SignalR,这是一种基于各种HTTP / HTML技术/黑客的实时,非基于资源的技术,以便推送信息。你当然可以使用SignalR来实现你所描述的内容,但只要不实现REST和纯粹的基于HTTP的请求/响应方法(并且不会使用SignalR),那就不会是OData根据定义。看看规格,你会很快看到它不会映射到SignalR。

<强>更新

即使在编辑之后,对我来说也没有意义。这就像你想要一些神奇的事情,让你通过邮局使用对讲机只是因为你可以查询他们的目录。

也许你应该区分使用者生产者中的客户,向前者和中心提供OData端点,并自己做必要的“魔术”。 / p>

此外,使用SignalR,我认为您不需要任何IQueryable支持来开箱即用的OData管道。