理解多层分布式架构、剖析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);

        }


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

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

webservice如何实现分布式服务的
  • UUIDAndUID
  • UUIDAndUID
  • 2017年03月05日 00:27
  • 1754

Webservice工作原理及实例

Web Service工作原理 一、Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上...
  • yangwenxue_admin
  • yangwenxue_admin
  • 2016年04月04日 23:12
  • 151128

web service概念、架构及相关知识

一、WebService的定义WebService有好几种定义: W3C组织对其定义:WebService是一个软件系统,为了支持跨网络的机器间互操作交互而设计。 WebService通常被定义为一组...
  • liu_shi_jun
  • liu_shi_jun
  • 2016年04月11日 14:42
  • 5302

WebService的简介, 原理, 使用

云计算的时代, 大有可为的依然是Server端. WebService也不是一种新技术, 只是一种简洁的技术, 比较方便的给客户端提供友好的接口。 这篇文章就好好理解一下, WebService框架的...
  • ostrichmyself
  • ostrichmyself
  • 2011年05月04日 12:21
  • 21868

分布式事务+webservice

  • 2017年10月26日 23:47
  • 39.2MB
  • 下载

多线程+Webservice分布式编程时需要注意的COM问题

多线程+Webservice分布式编程时需要注意的COM问题
  • shuaihj
  • shuaihj
  • 2013年12月24日 12:08
  • 6275

remoting和webservice的区别

简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。(10) 答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,...
  • sdgxboy
  • sdgxboy
  • 2010年03月05日 22:44
  • 435

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

remoting基础        一种分布式处理方式,可以说是DCOM的一种升级        跨过应用程序域,与另外的应用程序域进行通信,即穿越边界        在remoting中是...
  • bigpudding24
  • bigpudding24
  • 2015年12月21日 09:42
  • 2269

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

客户端调用时需要生成一个代理类   WCF的宿主程序: IIS、控制台程序、。。。   高层不应该依赖于底层,而是应该依赖于抽象;在高层与底层之间形成一个抽象层。 也就是说高层与底层之间的...
  • u012135077
  • u012135077
  • 2015年11月17日 17:23
  • 1065

WebService服务端与客户端开发

最近客户提出了将我们做的系统接入到他们系统之中,方便他们进行集中管理这个需求,其中主要就是运用了WebService技术来进行系统之间的接入。在此记录一下整个WebService是如何嵌入我们系统的以...
  • qq_21950667
  • qq_21950667
  • 2015年09月08日 17:12
  • 5845
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:理解多层分布式架构、剖析webservice、remoting技术
举报原因:
原因补充:

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