/// <summary>
        /// Connect the client to a RPC endpoint.
        /// </summary>
        /// <param name="endpoint">The endpoint for RPC server.</param>
        /// <param name="security_quality_of_service">The security quality of service for the connection.</param>
        public void Connect(RpcEndpoint endpoint, SecurityQualityOfService security_quality_of_service)
        {
            if (Connected)
            {
                throw new InvalidOperationException("RPC client is already connected.");
            }

            if (endpoint == null)
            {
                throw new ArgumentNullException("Must specify an endpoint", nameof(endpoint));
            }

            try
            {
                _transport = RpcClientTransportFactory.ConnectEndpoint(endpoint, security_quality_of_service);
                _transport.Bind(InterfaceId, InterfaceVersion, NdrNativeUtils.DCE_TransferSyntax, new Version(2, 0));
            }
            catch
            {
                // Disconnect transport on any exception.
                _transport?.Disconnect();
                _transport = null;
                throw;
            }
        }
Ejemplo n.º 2
0
 internal RpcTransportSecurityContext Check(IRpcClientTransport client_transport)
 {
     if (client_transport != _client_transport)
     {
         throw new ArgumentException("Security context wasn't created by this RPC transport.");
     }
     return(this);
 }
Ejemplo n.º 3
0
 internal RpcTransportSecurityContext(IRpcClientTransport client_transport,
                                      RpcTransportSecurity transport_security, int context_id)
 {
     _client_transport = client_transport;
     ContextId         = context_id;
     TransportSecurity = transport_security;
     AuthContext       = transport_security.CreateClientContext();
 }