日期:2014-05-17  浏览次数:20843 次

高分请教架构问题,请指导
大家好!
先说下背景,
毕业后一直是在做B/S方面的中小型企业信息管理系统,一般就是一台AP服务器一台数据库服务器,客户端直接通过浏览器向服务器发送请求,服务器返回HTML页面,这样我的分层架构,MODEL(实体层),IBussiness(业务逻辑处理接口),Bussiness(业务逻辑层),以及网站项目,都在同一台服务器上。

现在要做一个C/S结构的企业应用,这样我就犯难了,没有做过C/S模式下的架构,以下是我的想法:
第一种:可以将MODEL,IDAL,DAL及UI都放在客户端,这样相当于UI直接去操作数据库;
第二种:MODEL,IBussiness,UI为客户端,Bussiness,IBussiness,MODEL为服务端,客户端通过WEBSERVICE和服务端交互,服务端再去操作数据库;
第三种:……

如果使用第一种数据处理逻辑就暴露在客户端了,而且没有一个服务器的中转,估计日后更新程序是一个麻烦事!
我想采用第二种模式,现在想问的是:“我一个业务逻辑处理就是一个类,比如部门表,对应就会有一个部门业务逻辑处理接口,部门业务逻辑处理类,包含部门查询,部门新增等业务处理,这样我就有很多个业务处理逻辑接口,如果一一对应WEBSERVICE,那么WEBSERVICE数量也相当庞大,所以想通过配置和反射来实现通过不同参数调用WEBSERVICE返回对应的IDAL给客户端”,以下是我的代码,估计是序列化问题报错,请大虾们对我上述的思想和以下代码指导下,十分感谢!
服务端WEBSERVICE:
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        public object InvokeClass()
        {
            return Assembly.Load("BUSINNESS").CreateInstance("BUSINNESS.Test1");//之后做成配置
        }
    }

客户端通过WEBSERVICE获取业务逻辑对象:
localhost.WebService1 w = new localhost.WebService1();//返回服务端WEBSERVICE对象
            IDAL.ITest t = (IDAL.ITest)w.InvokeClass();//获取ITest业务逻辑对象   此处报错!
            
webservice 企业应用

------解决方案--------------------
ui直接操作数据库这个方案肯定不能用
安全、性能都是问题
------解决方案--------------------
用三层是对的,不过为什么报错,估计只有你的代码知道
------解决方案--------------------
返回的对象应该是不是一样的。
应该是是用Remoting。
建议你去看看Remoting相关的东东。
------解决方案--------------------
系统统一的WEBService: (里面用到了castle的IOC)

using System.Web.Services;
using System.ComponentModel;
using LY.TEC.Framework.Common.Container;
using LY.TEC.WSCommunication;

namespace LY.TEC.Framework.WebService
{
    /// <summary>
    /// CurrencyService 的摘要说明

    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    public class CurrencyService : System.Web.Services.WebService
    {
        [WebMethod(EnableSession = true)]
        public object[] MethodInvoke(object[] objArr)
        {
            IIOCContainer container = ContainerContext.Container;
            IInvokeServerComponent invokeComponent = container.Resolve<IInvokeServerComponent>();

            object[] objArrReturn = in