【问题标题】:Not using a reference to a WCF data service不使用对 WCF 数据服务的引用
【发布时间】:2013-09-10 16:18:38
【问题描述】:

为了避免使用 WCF 数据服务的维护开销,我正在避免生成服务引用。

目前我将 System.Data.Services.Client.DataServiceContext 类与 DataServiceQuery 结合使用。这可行,但意味着代码或配置中必须有一些硬编码的字符串——实体集名称和 URI。

有什么替代方法?我需要注意哪些陷阱?

我看到提到创建ChannelFactory

但是,这看起来很麻烦,或者至少从表面上看,它似乎并没有比我目前所做的更好。

编辑 更详细一点 - 这是公开 EF DBContext 的服务:

public class DocumentService : DataService<DocumentContext>
{
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.SetEntitySetAccessRule("Documents", EntitySetRights.All);
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
        config.UseVerboseErrors = true;
    }

    protected override DocumentContext CreateDataSource()
    {
        return new DocumentContext("DocumentsContext");
    }
}

以及我如何在没有明确引用的情况下调用它:

new DataServiceContext(uri, maxVersion).CreateQuery<DocumentEntity>(entitySetName)....etc

有什么替代方法? = DataServiceContext 类的替代品

【问题讨论】:

  • This works but means there has to be some hard coded strings 如果用户可以更改字符串,则可以将它们保存在配置文件中。在任何情况下,您都需要这些端点来创建服务引用。

标签: c# wcf-data-services .net-4.5


【解决方案1】:

WCF 中始终需要端点、契约(接口 + 返回类型)和绑定,实际上服务引用正在为您生成它们。

您可以使用 ChannelFactories 创建 WCF 服务调用程序,但是仍然需要在服务器和客户端之间共享前面提到的信息。

有一个super good post in stackoverflow about how to create an WCF invoker using ChannelFactory.

我建议 Darin Dimitrov 回答。

【讨论】:

  • 感谢您提供信息,但我没有明确的合同,也不确定该链接是否严格适用。请参阅我对问题的编辑。
  • 我明白了。您将 ODATA 与 EF 和 WCF 一起使用。将始终需要 URI,我也猜想实体集名称。客户端无法神奇地找出服务器的位置,或者在不指定至少名称的情况下获取一些实体
  • 我认为我的问题措辞不当。是的,他们总是需要这些信息,但问题的主要部分实际上是:如果有的话,除了使用 DataServiceContext 类还有什么替代方法?
【解决方案2】:

我本来可以用的:

ObjectQuery - 这可以使用一些实体框架 SQL 和 ObjectContext 手动构建,它需要连接字符串并支持 LINQ 到实体等

System.Data.EntityClient - 此命名空间还包括一些用于直接与 EF 交互的类。其中包括以行和列形式返回流数据的 EntityDataReader 类 - DBDataReader 的子类

由于这两种方法都需要直接连接到数据库来绕过服务,因此它们的实用性有限。我没有尝试过使用它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    相关资源
    最近更新 更多