在我的解决方案中,我有一个Web应用程序项目和一个包含所有业务逻辑的类库项目,在我使用Entity Framework时,它还充当数据访问层。这意味着我的edmx在这一层本身。
我在这个类库项目中有大约34个类,每个类中平均有6个公共方法。到目前为止,这些类都是从web应用程序直接调用的。没问题。现在我想介绍UI和业务逻辑层之间的WCF层。
这意味着我必须为我的所有方法编写包装器方法,并在WCF服务中公开它们。这是否意味着34 *6= 204个方法(大约)将作为操作契约出现在我的服务层中?根据OO,我认为这是一个太大的类,所以感觉是错误的。
我知道有通用服务设计模式,但是我还遗漏了什么吗?请给我建议。
发布于 2010-09-08 19:14:11
井,
我们有一个类似的应用程序,但类的数量更多。这里您担心的是,您不愿意向业务逻辑服务器的核心类提供序列化(这是通过WCF传递对象所需的)。
假设您有一个典型的三层应用程序,其中业务逻辑服务器和客户端访问相同的数据库。你需要做的很简单: 1)确保你所有的对象都有一个唯一的标识(这可以是一个字符串或Guid),2)在所有的WCF调用中传递对象ID。这意味着您不会在WCF端公开任何类。
这可能会更安全,因为你有一个web应用程序。
发布于 2010-09-08 19:17:44
您可以尝试RIA服务
http://www.silverlight.net/getstarted/riaservices/
我使用的是这个。
服务
2.1。将SVC服务指向您的实现,如下所示:
<%@ ServiceHost Language="C#" Debug="true" Service="BusinessLayer.Service" %>BusinessLayer.Service是class项目中的一个类。(需要在服务中引用)
2.2。将服务行为指向契约:
<service behaviorConfiguration="ServiceBehavior" name="BusinessLayer.Service">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttpBinding" contract="BusinessLayer.IService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</service>编辑名称(BusinessLayer.Service)和合同(Businesslayer.IService)
namespace BusinessLayer { ServiceContract公共接口IService { OperationContract void DoWork();}}
命名空间服务{公共类服务:IService{ public void DoWork() { }
发布于 2010-09-08 19:19:39
为什么要将整个业务逻辑层包装在WCF层中?在开始使用这种新方法之前,我会非常仔细地研究您的原因。您是否有根本无法使用的物理原因,例如需要在DMZ之外访问数据库的业务逻辑?如果是这样,那好吧。但如果不是这样,我就会三思而后行。
话虽如此,如果您别无选择,我将避免使用包装您的UI所需的所有公共方法的整体WCF类。首先,我将在web应用程序端引入一个接口,以便您可以依赖于UI中的抽象,而不是具体的实现。此外,我还会考虑使用WCF REST服务。您可以使用ServiceRoute来避免引入任何*.svc文件。然后,您可以使用WebGet/WebInvoke属性来修饰要公开的方法。这可能会节省大量的编码工作。
https://stackoverflow.com/questions/3667027
复制相似问题