我有一个ASP.NET MVC Web应用程序,其控制器使用WCF调用不同服务器上的域模型。域代码需要与数据库交谈,并且访问数据库服务器并不总是可以从Web服务器(取决于客户站点)进行访问,因此使用WCF可以访问允许我的代码连接到数据库的位置服务器。避免必须映射WCF生成的复杂类型
这是可配置的,所以如果控制器能够直接访问数据库服务器,那么我使用域对象的本地实例而不是使用WCF。
可以说我有一个页面,要求人的细节,如年龄,姓名等,这是一个复杂的类型,它是这样对我的WCF操作参数:
[OperationContract]
string SayHello(Person oPerson);
当我生成客户端代码(例如;通过在我的客户端添加服务引用)我得到一个单独的Person类来实现wcf合同。客户端,一个MVC网络应用程序,可以使用这个客户端类作为视图模型,一切都很好。我将其直接传递给WCF客户端方法,并且这一切都非常出色。
如果我的mvc客户端应用程序配置为不使用WCF我有问题。如果我直接从控制器调用我的域对象(假设我有一个域访问工厂/提供程序设置),那么我需要原始Person类而不是wcf生成的Person类。这导致我的问题是,如果我不使用WCF,我将不得不执行从一个对象到另一个对象的映射
这样做的主要问题是有许多域对象需要映射并出错可能会引入诸如在未来更改中遗忘的新属性
我正在学习并尝试使用WCF和MVC,可以帮助我了解在此方案中我的选项是什么?我相信会有一个讨巧的这个给定的WCF和MVC的扩展
感谢
谢谢你钉它!我已经将域数据对象放在单独的程序集中,但不知道“共享类型”的用途。这为我节省了很多工作,给我留下了深刻的印象。 生成的客户端实现了不同的服务接口,所以我不能抽象服务提供商像我想,但这仍然是一个伟大的结果。 这将是很好,如果我能共享服务接口太多,所以我可以有一个工厂类,返回服务实例(无论是WCF或本地)他们只需要调用方法。相反,我必须在提供程序类分开使用实例,但是,这不是一个大问题 – 2009-12-31 16:25:03
我用的ChannelFactory的建议是很简单排序的服务接口问题。现在我可以使用我的服务接口的实例,它使用WCF或不使用。完善 – 2010-01-01 19:25:01