用代理模式代替接口的WEB SERVICE

类别:网站制作 点击:0 评论:0 推荐:

最近在学WEB SERVICE,看到一篇关于开发基于接口的.NET Web服务的文章
地址:http://www.yesky.com/SoftChannel/72342380468371456/20011005/199858.shtml
也许是自己初学,功力还不够,虽然能明他大概的意思,但自己动手做起来却发现有点复杂
我想简单一点,于是我想到了设计模式的代理模式.


建立基于接口的互联网服务可以使我们在改变很少或基本不改变客户端代码的情况下,
很方便地更换服务提供商。我就想,如果我不用接口,我用代理,令他的作用相当于接口,看看效果怎么样..

互联网服务标准支持接口的概念,但在缺省情况下,.NET中的互联网服务是基于方法的,而不是基于接口的。因此,在目前的情况下,.NET并非“与生俱来”地允许我们开发基于接口的互联网服务。在本篇文章中,我将通过一些简单的步骤(包括服务器端和客户机端)来创建用代理代替接口的互联网服务。

假设有一个名称为SAYHELLO的互联网服务,该服务只是简单的返回字符串,还有一个使用这个服务的客户端应用和一个代理。我们可以在.NET中使用C#来实现,如下:
代理类:
public  class Proxy : System.Web.Services.WebService
{
    [WebMethod]
 public string sayhello(choose c)
 {
   string r = null;
  if (c == choose.Provider1)
  {
   r = new yournamespace.Provider1().sayhello();
  }
  if (c == choose.Provider2)
  {
   r =new yournamespace.Provider2().sayhello();//yournamespace是你添加的WEB SERVICE的引用的名称空间
  }
  return r;
 }

}//也可以用SWITCH --CASE

public enum choose

 Provider1=1,
 provider2=2
}
服务提供者:

public class Provider1 : System.Web.Services.WebService
{
 
 [WebMethod]
 public string sayhello()
 {
  return "hello";
 }

}

public class Provider2: System.Web.Services.WebService
{
 
 [WebMethod]
 public string sayhello()
 {
  return "hello world";
 }

}
上面是代理和服务商的类,代理负责和服务商打交道,对于提供同一服务的服务商,代理都用一枚举列出来,
客户只要查看代理的枚举就知道有什么服务商在提供服务(当然的是谁的服务更好就还不能知道,不过还是可以做的,为了简单的说,这里就不做.).

客户端:

private void button1_Click(object sender, EventArgs e)
  {
yournamespace.Proxy pr=new yournamespace.Proxy();
Proxy.choose c;
     if (this.radioButton1.Checked)
   {
     c =Proxy.chose.Provider1;
   }
   else
    {
     c = Proxy.chose.Provider2;
    }
   MessageBox.Show(pr.sayhello(c));


  }
客户端只是简单的用两个单选控件和一个BUTTON实现,上面的代码很简单,是不是一看就明

在我的这个例子中,我的想法是代理添加服务商的引用,然后客户就添加代理的引用,服务商跟客户是不直接打交道的,客户是可以很方便的换服务商的.那代理是不是很象一个接口呢!

暂时对WEB SERVICE的很多方面还不懂,要继续努力才行,干爸爹!

本文地址:http://com.8s8s.com/it/it30985.htm