理解多层分布式架构、剖析webservice、remoting技术

原创 2015年11月17日 17:23:06

客户端调用时需要生成一个代理类

 

WCF的宿主程序:

IIS、控制台程序、。。。

 

高层不应该依赖于底层,而是应该依赖于抽象;在高层与底层之间形成一个抽象层。

也就是说高层与底层之间的依赖是松散的,松散耦合。

契约式编程带来的意义:接口的意义。

 

如果我们采用类库的形式  它会给我们提供测试客户端。

 

服务是一组向客户端提供可用功能的端点(Endpoints)。而端点(终结点)则是网络上的一个能将消息送达的资源。客户端按照与服务之间的契约(Contract)来格式化消息,并将消息发送给端点来访问端点的功能。服务在端点指定的地址(Address)上监听具有特定格式的送达消息。

 

 

 

                     多层分布式架构分析

 

传统C/S架构的缺点:

}  当客户端数目激增时,服务器的性能将会因为无法进行负载平衡而大大下降。而一旦应用的需求发生变化,客户端和服务器端的应用程序则都需要修改,这样给应用的维护和升级带来了极大的不便,而且大量数据的传输也增加了网络的负载。

 

 

分布式架构的概念

在多层分布式应用中,客户端和服务器之间可以加入一层或多层应用服务程序,这种程序称为“应用服务器”(Application   Server)。开发人员可以将企业应用的商业逻辑放在中间层服务器上,而不是客户端,从而将应用的业务逻辑与用户界面隔离开,在保证客户端功能的前提下,为用户提供一个瘦的(thin)界面

 

这意味着如果需要修改应用程序代码,则可以只在一处(中间层服务器上)修改,而不用修改成千上万的客户端应用程序。   从而使开发人员可以专注于应用系统核心业务逻辑的分析、设计和开发,简化了企业系统的开发、更新和升级工作,极大增强了企业应用的伸缩性和灵活性。

 

 

企业要构建多层分布式系统,必须遵循分布式的工业标准,基于什么样的标准直接影响到企业应用系统的开放性和可扩展性。

}  目前分布式对象的标准主要有三种:Microsoft的DCOM、Sun的RMI以及OMG组织的CORBA。

}  DCOM是基于Windows环境的分布式对象标准,因此支持的平台种类有限。

}  RMI是以Java语言为主体的分布式对象架构,适合大型企业的跨平台需求,但现实的应用系统环境一般是由多种不同的程序语言建立起来的,只依赖一种程序语言构建的企业应用是很少见的。

}  CORBA是由800多个大型软、硬件公司参与的OMG组织所制定的分布式对象标准,获得IBM、Sun   Microsystems、Oracle、Sybase、Novell、Netscape等大型公司的支持,CORBA标准实现了不同平台之间对象的通信及互操作。  



Web service 的组成

1,  HTTP(Transport):基于HTTP传输协议,可以穿越防火墙,为互操作性带来好处

2,  XML:数据格式

3,  SOAP:封装协议,把xml格式外面在套上soap的这种头(相当于信封)

4,  WSDL(API Description):方法的一些描述

5,  UDDI:相当于一个电话本,作为webservice的目录

 

并不是所有的对象都可以序列化为所有对象,比如说二维数组。

 

服务端

using System.IO;

using System.Runtime.Serialization.Formatters.Binary;

  [WebMethod]

        publicbyte[] getData()

        {

            DataTabledt = new DataTable("emp");

            dt.Columns.Add("NO");

            dt.Columns.Add("name");

            dt.Columns.Add("age");

 

            DataRowdr = dt.NewRow();

            dr["NO"] = "1001";

            dr["name"] = "lishiduo";

            dr["age"] = "23";

            BinaryFormatterbf = new BinaryFormatter();

            MemoryStreamms = new MemoryStream();

            bf.Serialize(ms, dt); //序列化

            byte[]bt = ms.ToArray();

            ms.Close();

            returnbt;//返回字节数组

        }

客户端

   privatevoid button2_Click(objectsender, EventArgs e)

        {

            host.Service1 hs = newwebServiceClient.host.Service1();

            byte[]bt = hs.getData();

            //反序列化

            BinaryFormatterbf = new BinaryFormatter();

            MemoryStreamms=new MemoryStream(bt);

            DataTabledt=(DataTable)bf.Deserialize(ms); //反序列化

            ms.Close();

            dataGridView1.DataSource= dt;

        }

 

 

 

实例二:显示图片

服务端:

[WebMethod]

        publicbyte[] getImage()

        {

            FileStreamfs = new FileStream(Server.MapPath("cc.jpg"),FileMode.OpenOrCreate);

            byte[]bt = new byte[fs.Length];

            fs.Read(bt, 0, (int)fs.Length);

            fs.Close();

            returnbt;

        }

客户端:

private void button3_Click(object sender, EventArgse)

        {

            host.Service1 hs = newwebServiceClient.host.Service1();

            byte[]bt = hs.getImage();

            MemoryStreamms = new MemoryStream(bt);

            pictureBox1.Image = Image.FromStream(ms);

            ms.Close();

 

        }

 

 

异步调用webService

 

客户端:

  [WebMethod]

        publicstring hello()

        {

            Thread.Sleep(5000);

            return"hello world";

        }

服务端:

  //同步:在五秒之内我们不能干其他事情,影响客户体验

        privatevoid button4_Click(objectsender, EventArgs e)

        {

            host.Service1 hs = newwebServiceClient.host.Service1();

            stringresult = hs.hello();

            MessageBox.Show(result);

        }

 

        //异步

        privatevoid button5_Click(objectsender, EventArgs e)

        {

            host.Service1 hs = newwebServiceClient.host.Service1();

            hs.helloCompleted += new webServiceClient.host.helloCompletedEventHandler(hs_helloCompleted);

 

            hs.helloAsync();//:该方法是由代理类来生成的

 

        }

        voidhs_helloCompleted(object sender,webServiceClient.host.helloCompletedEventArgse)

        {

            MessageBox.Show(e.Result);

        }

 

 

Webservice的缺点

1,速度不高

2,  安全性低

3,  事务操作需要使用EnterpriseService

 

 

.NET Remoting从某种意义上讲是DCOM的替代品。是一种基于.net平台的分布式远程对象访问技术。

 

Remoting是一个分布式处理服务。服务器端首先创建通道(Channel),并自动开启监听通道。

       客户端发出的请求,传递远程对象。

因此,编写Remoting程序,主要分为三部分:

       1、编写被传递的远程对象;

       2、编写服务器端监听程序;

       3、编写客户端请求和处理对象程序;

 

 

接口部分(类库):

namespace ClassLibrary1

{

    publicinterface Ihello

    {

        stringhello(string name);

 

    }

}

服务端(窗体程序):

1,  实现接口对应的方法:

 

namespace Server

{

    //远程对象,继承MarshalByRefObject后,对象可以跨应用程序域进行通讯

    classmyHello : MarshalByRefObject,Ihello

    {

        #region hello 成员

 

        publicstring hello(stringname)

        {

            thrownew NotImplementedException();

        }

 

        #endregion

    }

}

2,启动

 

   //启动

        privatevoid button1_Click(objectsender, EventArgs e)

        {

 

            //创建tcp通道

            TcpChannelchannel = new TcpChannel(3333);

            //注册通道

            ChannelServices.RegisterChannel(channel,false);

            //注册远程对象

            RemotingConfiguration.RegisterWellKnownServiceType(typeof(myHello), "hello", WellKnownObjectMode.SingleCall);

 

            label1.Text = "服务已启动....";

        }

 

客户端(窗体程序):

   privatevoid button1_Click(objectsender, EventArgs e)

        {

          Ihelloobj=  (Ihello)Activator.GetObject(typeof(Ihello), "tcp://127.0.0.1:3333/hello");

         strings= obj.hello("beifeng");

         MessageBox.Show(s);

        }


版权声明:本文为博主原创文章,未经博主允许不得转载。

企业多层分布式应用架构

 企业多层分布式应用架构     2000-07-19·   anony·yesky                         在信息产业高速发展的今天,企业间的竞争将更加激烈。随着规模的不断扩...

@repository

@Repository用于标注数据访问组件,即DAO组件; 例: @Repository public class VentorDaoImpl implements iVentorDao { ...

分布式通信的几种方式

在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,特别是在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等...

WebService同步调用、异步调用及WebService实现分布式部署

最近因工作上的原因需要用到webservice,于是学习走起。 1.首先在我们的webservice方法 返回结果前让线程休眠两秒。 2.在要调用的页面需要在页面声明里面添加属...
  • lmnotlm
  • lmnotlm
  • 2013年04月11日 17:36
  • 883

remoting与socket、web service的比较及实例

remoting基础        一种分布式处理方式,可以说是DCOM的一种升级        跨过应用程序域,与另外的应用程序域进行通信,即穿越边界        在remoting中是...

Web Service 实现分布式服务的基本原理

webservice如何实现分布式服务的

webservice实现创建分布式应用程序的协议

任何平台都有它的数据表示方法和类型系统。要实现互操作性,Web Service平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件类型中的不同类型系统。这些协议有: XML和XSD ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

WebService机制和使用《一》

问题?WebService机制和使用 一.WebService是什么? 定义:Web服务(Web Services)是一段位于Internet上的业务逻辑,它是基于TCP/IP的创建出来的服务,基...
  • Mr_li13
  • Mr_li13
  • 2016年04月27日 15:17
  • 3272

c# Remoting分布式开发

.NET c# Remoting分布式开发   一、基础概念   Remoting是采用分布式进行编程的一种技术,主要用于管理跨应用程序域的同步和异步RPC 会...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:理解多层分布式架构、剖析webservice、remoting技术
举报原因:
原因补充:

(最多只允许输入30个字)