在 .NET 中使用 WEB SERVICE 的CallBacks机制 (5)
2024-07-10 13:01:43
供稿:网友
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 寻址,密码,服务器代理等。