【发布时间】:2014-01-06 22:01:58
【问题描述】:
我正在开发一个业务线应用程序,由于我无法控制的原因,它必须使用客户端服务器架构。
即客户端都连接到应用服务器,应用服务器连接到数据库等。
为了做到这一点,我在过去创建了一个 WCF 服务,该服务公开了数据库的 CRUD 类型方法。 WCF 中存在这样的方法:
Customer GetCustomer(int customerId);
List<Customer> GetAllCustomers();
etc...
但是我总是发现同样的两个问题:
1) 有很多管道代码连接:客户端 -> 应用服务器 -> 数据库服务器
2) 当客户端应用程序需要获取更复杂的数据时,我最终不得不在服务器端添加方法,这最终会导致如下可怕的事情:
Customer GetCustomerByNameWhereCustomerHasBoughtProduct(string name, int productCode);
或
或者返回比需要更多的数据并在客户端进行处理。这对数据库来说很慢而且非常糟糕。比如:
List<Customer> customers = _Service.GetAllCustomers();
List<Product> products = _Service.GetAllProducts();
List<Customer> customersWhoBoughtX = (from c in customers where
c.OrderLog.Contains(products.Where(p => p.Code == x)
select c).ToList()
我在这里做错了什么,因为这必须以某种方式解决。
有没有办法使用约定通过 wcf 服务公开数据库?或者任何其他可以帮助我正在做的事情的想法?
理想情况下,我会说客户端可以直接连接到数据库,但是我被告知这是一个无法更改的问题。
非常感谢您的指点。
谢谢
【问题讨论】:
-
如果它是一个简单的 CRUD,请尝试 WCF 数据服务。它具有灵活的过滤功能
标签: c# wcf entity-framework client-server