您的位置:首页 > 其它

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

2008-04-24 16:29 417 查看
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 寻址,密码,服务器代理等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: