用的是netTcpBinding
Client
static void Main(string[] args) { for (int i = 0; i < 40; i++) { ServiceClient client = new ServiceClient(); ThreadPool.QueueUserWorkItem(_ => { Console.WriteLine("SessionID:{0}", client.Add(1, 2)); }); } Console.Read(); }
Server
[ServiceContract()] public interface IService { [OperationContract()] string Add(int i, int j); } [ServiceBehavior(InstanceContextMode= InstanceContextMode.PerSession)] public class Service:IService.IService { public string Add(int i, int j) { Console.WriteLine(OperationContext.Current.SessionId); return OperationContext.Current.SessionId; } }
客户端调用的时候用的是不同的ServiceClient 实例, 服务端也是InstanceContextMode.PerSession
这不是应该会有不同的回话吗?
因为是同一个会话嘛。
客户端调用的时候用的是不同的ServiceClient 实例, 服务端也是InstanceContextMode.PerSession
这不是应该会有不同的回话吗? 还有为什么输出总会带有id=2 id=3 这种东西。。
@koi: 可你的代码:
ServiceClient client = new ServiceClient();
ThreadPool.QueueUserWorkItem(_ =>
{
Console.WriteLine("SessionID:{0}", client.Add(1, 2));
});
显示的是你使用了同一个 client.
你改成这样:
ThreadPool.QueueUserWorkItem(_ =>
{
ServiceClient client = new ServiceClient();
Console.WriteLine("SessionID:{0}", client.Add(1, 2));
});
@Launcher: 你这样写好像跟我的是一样的
我按下面的改了下 结果还是一样的 还是一样的sessionid
for (int i = 0; i < 40; i++) { var q = i; ThreadPool.QueueUserWorkItem(_ => { ServiceClient client = new ServiceClient(); Console.WriteLine("SessionID:{0}", client.Add()); Console.WriteLine("Q:{0}", q); }); }
@koi: OperationContract(IsInitiating = true, IsTerminating = true)]
@Launcher: 结果还是都一样的SessionID
@Launcher: 我是这样改的
[ServiceContract(SessionMode=SessionMode.Required)] public interface IService { [OperationContract(IsInitiating = true, IsTerminating = true)] string Add(); }
@koi: 得,你等我写个程序给你演示下吧。
@koi: 你那个 id = 0,1,2,3 就是表示的不同的会话,别只看前面的 uuid 。