加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WSE2.0 Webservice中事件回调客户端应用程序(callback)

发布时间:2020-12-17 02:08:43 所属栏目:安全 来源:网络整理
导读:?源码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

?源码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);
??????? }
??? }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读