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

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

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Microsoft WSE 2.0 SP3是微软的一个安全性和互操作性解决方案,它提供了用于开发和部署Web服务的工具和方法。安装Microsoft WSE 2.0 SP3的步骤如下: 1. 下载安装程序:首先,您需要从微软官网或其他可靠来源下载Microsoft WSE 2.0 SP3的安装程序。 2. 运行安装程序:找到下载的安装程序文件,并双击运行它。它会打开安装向导。 3. 阅读许可协议:在安装向导,您将看到许可协议的内容。请阅读并接受许可协议,然后点击"下一步"继续安装。 4. 选择安装位置:接下来,您需要选择WSE 2.0 SP3的安装位置。您可以选择接受默认位置,或自定义安装位置。点击"下一步"继续。 5. 完成安装:在最后一步,您可以选择是否创建桌面快捷方式,并点击"安装"开始安装过程。 6. 等待安装完成:安装过程可能需要一段时间,具体时间取决于您的计算机性能和网络速度。请耐心等待直到安装完成。 7. 检查安装:安装完成后,您可以打开所安装的目录,验证Microsoft WSE 2.0 SP3是否已成功安装。 总结: 安装Microsoft WSE 2.0 SP3的步骤包括下载安装程序、运行安装程序、阅读许可协议、选择安装位置、完成安装和检查安装。请确保在安装过程保持稳定的互联网连接,并根据安装向导的指示进行操作。希望这些步骤对您有帮助! ### 回答2: Microsoft WSE 2.0 SP3是微软提供的一个Web服务扩展,用于增强和加强Web服务的安全性和可靠性。要安装Microsoft WSE 2.0 SP3,可以按照以下步骤进行操作: 首先,确保已经满足安装要求。Microsoft WSE 2.0 SP3只能安装在支持Microsoft .NET Framework 2.0的操作系统上。因此,在安装之前,请确保您的计算机已经安装了.NET Framework 2.0或更高版本。 其次,下载Microsoft WSE 2.0 SP3安装程序。您可以在微软的官方网站上找到安装程序的下载链接。下载完成后,双击安装程序运行安装向导。 然后,按照安装向导的指示进行操作。首先,选择安装目录,通常建议使用默认的安装目录。然后,阅读许可协议并同意。接下来,选择要安装的组件。默认情况下,所有组件都会被安装,您也可以根据自己的需要进行选择。最后,点击“安装”按钮开始安装。 安装过程可能会需要一些时间,取决于您的计算机性能和网络速度。安装完成后,您可以看到安装成功的提示信息。此时,您可以关闭安装程序并重新启动计算机。 完成上述步骤后,Microsoft WSE 2.0 SP3将成功安装在您的计算机上。您现在可以在您的项目使用WSE 2.0 SP3提供的各种强大的安全性和可靠性功能来增强和保护您的Web服务。 需要注意的是,Microsoft WSE 2.0 SP3已经不再支持并且已经过时。微软推荐使用更高版本的Web服务技术和工具,如Windows Communication Foundation(WCF)。因此,在开发新的Web服务项目时,建议使用最新的微软技术来获得更好的性能和功能。 ### 回答3: Microsoft WSE (Web Services Enhancements) 2.0 SP3 是一个为微软开发的 Web 服务提供增强功能的扩展。要安装 Microsoft WSE 2.0 SP3,您可以按照以下步骤进行操作: 1. 首先,确保您的计算机上已安装 .NET Framework 2.0。WSE 2.0 SP3 是构建在 .NET Framework 2.0 上的,所以在安装 WSE 2.0 SP3 之前必须先安装 .NET Framework 2.0。 2. 下载 Microsoft WSE 2.0 SP3 安装程序。您可以在微软官方网站上搜索并下载最新版本的 WSE 2.0 SP3 安装程序或从可信任的第三方软件下载网站获取。 3. 运行下载的安装程序。双击下载的安装程序文件,然后按照安装向导的提示进行操作。请注意,在安装过程可能需要管理员权限。 4. 阅读并接受许可协议。在安装向导会显示许可协议的内容。请仔细阅读并理解协议条款,如果同意协议,选择相应的选项继续安装。 5. 选择安装选项。在安装向导,您可以选择安装 WSE 2.0 SP3 的位置和其他选项。按照自己的需求进行选择,然后继续安装。 6. 等待安装完成。安装程序将复制文件、注册组件和设置配置信息。请耐心等待安装过程完成。 7. 检查安装结果。安装完成后,您可以在计算机的安装目录找到 WSE 2.0 SP3 的文件和文件夹。您还可以检查计算机的控制面板是否存在 WSE 2.0 SP3 的相关项。 通过上述步骤,您应该可以成功安装 Microsoft WSE 2.0 SP3。如果在安装过程遇到任何问题,您可以查阅官方文档或在论坛或社区寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值