Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }