WSE2.0 Webservice中事件回调客户端应用程序(callback)
来源:互联网 发布:java 反射 混淆 编辑:程序博客网 时间:2024/05/16 14:20
源码Service.cs
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Collections;
using Microsoft.Web.Services2;
using Microsoft.Web.Services2.Messaging;
using Microsoft.Web.Services2.Addressing;
namespace WebService
{
[System.Web.Services.WebServiceBinding(Name = "RBWebService", ConformsTo = System.Web.Services.WsiProfiles.BasicProfile1_1, EmitConformanceClaims = true), System.Web.Services.Protocols.SoapDocumentService()]
public class RBWebService : System.Web.Services.WebService
{ #region WSE 2.0 CallBack
private ArrayList Listeners
{
get
{
return (ArrayList)Application["Listeners"];
}
}
/// <summary>
/// 添加客户端监听程序
/// </summary>
/// <param name="listener">要添加的客户端名</param>
[WebMethod]
public void AddListener(string listener)
{
this.Listeners.Add(listener);
}
/// <summary>
/// 删除监听客户端
/// </summary>
/// <param name="listener">要删除的客户端名</param>
[WebMethod]
public void RemoveListener(string listener)
{
for (int i = 0; i < this.Listeners.Count; i++)
{
if (((string)this.Listeners[i]).Equals(listener))
{
this.Listeners.RemoveAt(i);
return;
}
}
}
/// <summary>
/// 调用监听程序入口
/// </summary>
[WebMethod]
public void FireEvent()
{
for (int i = 0; i < this.Listeners.Count; i++)
{
SoapEnvelope envelope = new SoapEnvelope();
envelope.SetBodyObject("blah blah");
envelope.Context.Addressing.Action = new Action((string)(this.Listeners[i]));
envelope.Context.Addressing.ReplyTo = new ReplyTo(new System.Uri((string)(this.Listeners[i])));
SoapSender peerProxy = new SoapSender(new System.Uri((string)(this.Listeners[i])));
try
{
peerProxy.Send(envelope);
}
catch (Exception e)
{
this.Listeners.RemoveAt(i);
}
}
}
/// <summary>
/// 获取在线的监听器列表
/// </summary>
/// <returns>saop;saop;</returns>
[WebMethod]
public string GetListeners()
{
string listeners = "";
foreach (string item in this.Listeners)
{
listeners += item + ";";
}
return listeners;
}
#endregion WSE 2.0 CallBack
}
}
在web.config中添加
<system.web>
<webServices>
<soapExtensionTypes>
<add type="Microsoft.Web.Services2.WebServicesExtension, Microsoft.Web.Services2,Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" priority="1" group="0"/>
</soapExtensionTypes>
</webServices>
</system.web>
在Bin文件夹中添加Microsoft.Web.Services2.dll引用
在winForm中
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Web.Services2.Messaging;
using Microsoft.Web.Services2;
namespace WinApp
{
public delegate void MessageRecievedHandler(SoapEnvelope envelope);
public partial class WSECallBack : Form
{
public WSECallBack()
{
InitializeComponent();
server.Url = Properties.Settings.Default.WSEWebSericeUrl;//配置webservice的地址
}
localhost.RBWebService server = new WinApp.localhost.RBWebService();
private void btnAdd_Click(object sender, EventArgs e)
{
server.AddListener(this.myUri.ToString());
this.textBoxOutput.Text += "/r/n/r/n" + server.GetListeners();
}
private void btnRemove_Click(object sender, EventArgs e)
{
server.RemoveListener(this.myUri.ToString());
this.textBoxOutput.Text += "/r/n/r/n" + server.GetListeners();
}
private void btnFire_Click(object sender, EventArgs e)
{
server.FireEvent();
}
private void btnList_Click(object sender, EventArgs e)
{
this.textBoxOutput.Text += "/r/n/r/n" + server.GetListeners();
}
private void Form1_Load(object sender, EventArgs e)
{
int port = (new System.Random()).Next(3000, 7000);
this.Text += " Listner Port: " + port;
myUri = new Uri("soap.tcp://" + System.Net.Dns.GetHostName() + ":" + port + "/MyEventListner");
MyReceiver receiver = new MyReceiver();
receiver.MessageRecieved += new MessageRecievedHandler(receiver_MessageRecieved);
SoapReceivers.Add(myUri, receiver);
}
System.Uri myUri;
delegate void Update(TextBox textBox, string message);
public void UpdateText(TextBox textBox, string message)
{
textBoxOutput.Text += "/r/nEvent Recieved";
}
void receiver_MessageRecieved(SoapEnvelope envelope)
{
if (this.textBoxOutput.InvokeRequired)
this.textBoxOutput.Invoke(new Update(UpdateText), this.textBoxOutput, "/r/nEvent Recieved");
}
}
public class MyReceiver : SoapReceiver, System.Web.IHttpHandler
{
public event MessageRecievedHandler MessageRecieved;
protected override void Receive(SoapEnvelope envelope)
{
OnMessageRecieved(envelope);
}
private void OnMessageRecieved(SoapEnvelope envelope)
{
if (MessageRecieved != null)
MessageRecieved(envelope);
}
}
}
- WSE2.0 Webservice中事件回调客户端应用程序(callback)
- wse2.0实现webservice安全(转)
- vs.net2003+WSE2.0 打造安全的webservice
- WSE2.0中X509安全令牌的使用
- callback 注册客户端事件 无刷新页面
- [dotNET]WSE2.0中的发送器/接收器流程用于WebService与后台侦听服务交互
- [dotNET]WSE2.0中的发送器/接收器流程用于WebService与后台侦听服务交互
- ASP.NET2.0实现无刷新客户端回调的Callback机制(示例源码)
- AJAX与callback的区别(续asp.net2.0客户端回调的使用)
- 用Ajax.net实现客户端回调(Callback)
- java中callback回调机制解析
- WS-Security中WSE2.0和SUN JWSDP1.5的协作
- vs.net2005 beta2与wse2.0
- 客户端回调服务器端事件
- 回调技术(CallBack)
- 回调机制(Callback)
- Callback 回调模式
- 接口回调Callback
- Byte
- 使用 PHP 快速生成 Flash 动画
- 海纳百川 有容乃大——09年SD2.0大会侧记(1)
- Example
- 使用Ant打war包报错
- WSE2.0 Webservice中事件回调客户端应用程序(callback)
- java调用webService的各种方法
- 超越自己
- java调用外部web Service
- 双网卡linux快速搭建nat主机共享上网!
- SCSI简介
- 微软产品目录
- 美女为什么美?????
- NHibernate+Oracle10g搭建一个项目架构全程解析(四)