/// <summary> /// Close a session. /// </summary> /// <param name="server">The server where the session is active.</param> /// <param name="requestHeader">The request header of the session.</param> public static void CloseSession(this SessionServerBase server, RequestHeader requestHeader) { // close session var response = server.CloseSession(requestHeader, true); ValidateResponse(response); }
/// <summary> /// Create and Activate a session without security. /// </summary> /// <remarks> /// The request header is used to call services directly, /// without establishing a session with a client. /// </remarks> /// <param name="server">The server to connect to.</param> /// <param name="sessionName">A session name.</param> /// <returns>The request header for the session.</returns> public static RequestHeader CreateAndActivateSession( this SessionServerBase server, string sessionName, double sessionTimeout = DefaultSessionTimeout, uint maxResponseMessageSize = DefaultMaxResponseMessageSize) { // Find TCP endpoint var endpoints = server.GetEndpoints(); var endpoint = endpoints.FirstOrDefault(e => e.TransportProfileUri.Equals(Profiles.UaTcpTransport) || e.TransportProfileUri.Equals(Profiles.HttpsBinaryTransport)); if (endpoint == null) { throw new System.Exception("Unsupported transport profile."); } // no security endpoint.SecurityMode = MessageSecurityMode.None; endpoint.SecurityPolicyUri = SecurityPolicies.None; var context = new SecureChannelContext( sessionName, endpoint, RequestEncoding.Binary); // set security context SecureChannelContext.Current = context; var requestHeader = new RequestHeader(); // Create session var response = server.CreateSession( requestHeader, null, null, null, sessionName, null, null, sessionTimeout, maxResponseMessageSize, out var sessionId, out var authenticationToken, out sessionTimeout, out var serverNonce, out var serverCertificate, out var endpointDescriptions, out var serverSoftwareCertificates, out var signatureData, out var maxRequestMessageSize); ValidateResponse(response); // Activate session requestHeader.AuthenticationToken = authenticationToken; response = server.ActivateSession(requestHeader, signatureData, null, new StringCollection(), null, null, out serverNonce, out var results, out var diagnosticInfos); ValidateResponse(response); return(requestHeader); }