internal void CanSerializeAndDeserialize_Disconnected() { // Arrange var correlationId = Guid.NewGuid(); var response = new Disconnected( "Ok", new ServerId("NautilusData.TickProvider"), SessionId.Create(new ClientId("Trader-001"), StubZonedDateTime.UnixEpoch(), "None"), correlationId, Guid.NewGuid(), StubZonedDateTime.UnixEpoch()); // Act var packed = this.serializer.Serialize(response); var unpacked = (Disconnected)this.serializer.Deserialize(packed); // Assert Assert.Equal(response, unpacked); Assert.Equal(correlationId, unpacked.CorrelationId); Assert.Equal("NautilusData.TickProvider", unpacked.ServerId.Value); Assert.Equal("Trader-001-e5db3dad8222a27e5d2991d11ad65f0f74668a4cfb629e97aa6920a73a012f87", unpacked.SessionId.Value); this.Output.WriteLine(Convert.ToBase64String(packed)); this.Output.WriteLine(Encoding.UTF8.GetString(packed)); }
/// <summary> /// 包含获取创建session的机制 /// </summary> /// <param name="actionContext"></param> public override void OnAuthorization(HttpActionContext actionContext) { //actionContext.Request.Headers.Add("Access-Control-Allow-Origin", "*"); var controller = (BaseController)actionContext.ControllerContext.Controller; if (controller is IRequiresSessionState) { //有session需求 var sessionId = controller.ReadCookie("Customer-Session"); if (sessionId == null || sessionId.Count() == 0) { sessionId = SessionId.Create(ref this._randgen); var response = HttpContext.Current.Response; //有线程问题 var cookie = new HttpCookie("Customer-Session", sessionId); cookie.Expires = DateTime.MaxValue; response.Cookies.Add(cookie); lock (locker) { //无sessionid if (!SessionContainer.ContainsKey(sessionId)) { controller.Session = new SessionState(sessionId, SessionContainer.TimeOut); SessionContainer.Add(sessionId, controller.Session); } else { //session生成重合的情况 暂时复用 有风险 controller.Session = SessionContainer[sessionId]; } } } else { lock (locker) { if (SessionContainer.ContainsKey(sessionId)) { //有sessionid 有存储 controller.Session = SessionContainer[sessionId]; } else { //有sessionid 无存储 (session丢失或者过期 重新生成) SessionContainer.Remove(sessionId); sessionId = SessionId.Create(ref this._randgen); var response = HttpContext.Current.Response; //有线程问题 var cookie = new HttpCookie("Customer-Session", sessionId); cookie.Expires = DateTime.MaxValue; response.Cookies.Add(cookie); controller.Session = new SessionState(sessionId, SessionContainer.TimeOut); SessionContainer.Add(sessionId, controller.Session); } } } } }
internal void CanSerializeAndDeserialize_DisconnectRequests() { // Arrange var serializer = new MsgPackRequestSerializer(); var request = new Disconnect( new ClientId("Trader-001"), SessionId.Create(new ClientId("Trader-001"), StubZonedDateTime.UnixEpoch(), "None"), Guid.NewGuid(), StubZonedDateTime.UnixEpoch()); // Act var packed = serializer.Serialize(request); var unpacked = (Disconnect)serializer.Deserialize(packed); // Assert Assert.Equal(request, unpacked); Assert.Equal(new ClientId("Trader-001"), unpacked.ClientId); Assert.Equal("Trader-001-e5db3dad8222a27e5d2991d11ad65f0f74668a4cfb629e97aa6920a73a012f87", unpacked.SessionId.Value); }