相关疑难解决方法(0)

检测WCF双工合同中的客户端死亡

我正在尝试构建一个SOA,客户端可以在服务器上执行长时间运行的查询,服务器使用回调进行响应.

我希望能够检测客户端是否断开连接(通过用户启动的关闭,未处理的异常或丢失网络连接),以便服务器可以选择取消昂贵的请求.

我正在测试各种故障情况,但我似乎无法启动某些事件处理程序.

经过测试的失败案例:在请求后杀死客户端进程.使用像CurrPorts这样的程序来关闭TCP连接.

测试代码:

using System;
using System.ServiceModel;
using System.Threading;

namespace WCFICommunicationObjectExperiments
{
    class Program
    {
        static void Main(string[] args)
        {
            var binding = new NetTcpBinding(SecurityMode.None);

            var serviceHost = new ServiceHost(typeof (Server));
            serviceHost.AddServiceEndpoint(typeof (IServer), binding, "net.tcp://localhost:5000/Server");
            serviceHost.Open();
            Console.WriteLine("Host is running, press <ENTER> to exit.");
            Console.ReadLine();
        }

    }

    [ServiceContract(CallbackContract = typeof(IClient))]
    public interface IServer
    {
        [OperationContract]
        void StartProcessing(string Query);
    }

    public interface IClient
    {
        [OperationContract]
        void RecieveResults(string Results);
    }

    [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class Server : IServer
    {

        public void …
Run Code Online (Sandbox Code Playgroud)

c# wcf duplex callback nettcpbinding

31
推荐指数
2
解决办法
3万
查看次数

处理双工绑定WCF应用程序中的已删除客户端

我们在WCF应用程序中使用了pub-sub模型,该模型几乎遵循Microsoft示例:设计模式:基于列表的发布 - 订阅.

虽然该服务提供了一个概念,subscribe()并且unsubscribe()在客户端死亡或通道出现故障时处理清理的最佳实践是什么?目前,当客户端订阅时,我将处理程序附加到当前InstanceContext的事件ClosedFaulted事件(服务用户的PerSession实例上下文模式和netTcpBinding):

_communicationObject = OperationContext.Current.InstanceContext;
_communicationObject.Closed += OnClientLost;
_communicationObject.Faulted += OnClientLost;
Run Code Online (Sandbox Code Playgroud)

然而,OnClientLost处理程序只是取消订阅客户端:

  1. 以上是一个好的做法,并且足够强大,能够在客户端断开双工通信时捕获所有情况吗?或者服务是否应该只处理在尝试与客户端通信并处理清理时遇到的异常?
  2. 除了取消订阅客户端回调处理程序之外,是否应该执行任何进一步的清理,特别是在出现故障的情况下?

这个问题提出了类似的问题,但最终没有提供客户呼叫订阅和/或取消订阅之外的案例的答案

谢谢

.net wcf duplex publish-subscribe

14
推荐指数
1
解决办法
6857
查看次数

标签 统计

duplex ×2

wcf ×2

.net ×1

c# ×1

callback ×1

nettcpbinding ×1

publish-subscribe ×1