我正在尝试构建一个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) 我正在开发一个基于发布者订阅者模式的系统.我有一个在WPF应用程序中运行的WCF服务.有许多客户端连接到该服务.客户端也是WPF.我在下面附上我系统的代码片段:
服务:
[ServiceContract(Namespace = "http://AutoFXProfitsServer", SessionMode = SessionMode.Required, CallbackContract = typeof(ITradeMirrorClientContract))]
public interface ITradeMirror
{
[OperationContract]
string Subscribe(string userName, string password, int accountID);
[OperationContract]
bool Unsubscribe(string userName, string password, int accountID);
[OperationContract]
void PublishNewSignal(string signalInformation);
}
public interface ITradeMirrorClientContract
{
[OperationContract(IsOneWay = true)]
void NewSignal(string signalInformation);
}
public class NewSignalEventArgs : EventArgs
{
public string SignalInformation;
}
.
.
.
.
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, AutomaticSessionShutdown = false)]
public class TradeMirrorService : DependencyObject, ITradeMirror
{
.
.
.
.
public string …Run Code Online (Sandbox Code Playgroud)