在 .NET 中使用 WEB SERVICE 的CallBacks机制 (5)

3. Web Form
对于WebService”A”我们使用的浏览器作为客户端。 每个 Web Methods有自己的按钮触发事件,在栈(Stack)中来保存Session类的状态。 页面的更新基于下面的机制:事件处理程序把数据压到Session栈,在Page_Load时提取出来并且插入到ListBox control中。另一个议题是以异步方式调用DoSomeWorkA方法,它可以产生和处理callback,这就是我们为什么能送另一个请求给WebService”A”的原因。注意每项工作都被它的验证票据ID所识别。
namespace WebFormCallbackWS
{
  public class WebForm1 : System.Web.UI.Page
  {
    // ...
    protected ServiceA sa = new ServiceA();
       
    public WebForm1()
    {
      Page.Init += new System.EventHandler(Page_Init);
    }
 
    private void Page_Load(object sender, System.EventArgs e)
    {
      if(IsPostBack == false)
      {
        //initialize controls, one time!
        if(Session["Status"] == null)
          Session["Status"] = Stack.Synchronized(new Stack());
      }
      else
      {
        Stack stack = Session["Status"] as Stack;
        while(stack.Count > 0)
          ListBoxCallbackStatus.Items.Add(stack.Pop().ToString());
 
        int numberOfItems = ListBoxCallbackStatus.Items.Count;
        if(numberOfItems > 13)
          ListBoxCallbackStatus.SelectedIndex = numberOfItems - 13;
      }
    }
    private void Page_Init(object sender, EventArgs e)
    {
      // ...
    }
 
    #region Web Form Designer generated code
    private void InitializeComponent()
    {  
      // ...
    }
    #endregion
 
    // Call the web service asynchronously
    private void ButtonDoSomeWorkA_Click(object sender, System.EventArgs e)
    {
      int count = Convert.ToInt32(TextBoxCount.Text);
      string ticket = TextBoxTicketId.Text;
      //
      AsyncCallback callback = new AsyncCallback(callbackDoSomeWorkA);
      IAsyncResult ar = sa.BeginDoSomeWorkA(count, ticket, callback, null);
      ListBoxCallbackStatus.Items.Add(string.Format("#{0} start ...",
           ticket));
    }
    // the call callback from the WebService
    private void callbackDoSomeWorkA(IAsyncResult ar)
    {
      string retval = sa.EndDoSomeWorkA(ar);
      Stack stack = Session["Status"] as Stack;
      stack.Push(retval);
    }
    // call the web service
    private void ButtonAbort_Click(object sender, System.EventArgs e)
    {
      Stack stack = Session["Status"] as Stack;
      stack.Push(sa.AbortWorkA(TextBoxTicketId.Text));
 
    }
    // Get the status from the web service
    private void ButtonRefresh_Click(object sender, System.EventArgs e)
    {
      Stack stack = Session["Status"] as Stack;
      stack.Push(sa.GetStatusWorkA(TextBoxTicketId.Text));
    }
    // clean-up the listbox
    private void ButtonClear_Click(object sender, System.EventArgs e)
    {
      ListBoxCallbackStatus.Items.Clear();
    }
  }
}
 
ok,我们现在开始做过测试。上述的照片显示了Web 形式的用户界面。 首先,确定你网络联机并且处于企业内部局域网络。 在 DoSomeWork 按钮上的单击,然后请求状态结果。Status 和Abort按钮可以在容易时间点击。 ListBox 控件将会显示某个工作的当前状态 (由验证票据得到)
结论
使用应用程序模型的 WEB  SERVICE开创了分布式架构的一个新纪元。在企业化模型层次结构中使用.Net Framework动态的调用Web Methods是简单的,很直接的。这篇文章说明它如何使用 C#语言来实现。 这种解决方案很好的解释了相关的概念和设计时所设计的问题。如果真正投入到市场,还需要考虑许多因素,如安全设计,完整的 url 寻址,密码,服务器代理等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值