0

为了避免使用 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 类的替代品

4

2 回答 2

1

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

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

stackoverflow 中有一篇非常好的文章,介绍了如何使用 ChannelFactory 创建 WCF 调用程序。

我建议 Darin Dimitrov 回答。

于 2013-09-10T16:33:36.850 回答
0

我本可以使用:

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

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

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

于 2013-09-13T10:02:55.530 回答