private static void Main(String[] args)
        {
            // Obtém dados através dos argumentos
            string busIOR = File.ReadAllText(args[0]);
            string domain = args[1];
            string entity = args[2];

            byte[] password = new ASCIIEncoding().GetBytes(args[3]);
            SSLUtils.InitORBWithSSL(args[4], args[5], args[6], args[7],
                                    Convert.ToUInt16(args[9]), Convert.ToUInt16(args[8]), Convert.ToBoolean(args[10]), Convert.ToBoolean(args[11]),
                                    args[12], Convert.ToBoolean(args[13]), Convert.ToBoolean(args[14]));

            // Cria conexão e a define como conexão padrão tanto para entrada como saída.
            // O uso exclusivo da conexão padrão (sem uso de current e callback de despacho) só é recomendado para aplicações que criem apenas uma conexão e desejem utilizá-la em todos os casos. Para situações diferentes, consulte o manual do SDK OpenBus e/ou outras demos.
            OpenBusContext context = ORBInitializer.Context;
            Connection     conn    = context.ConnectByReference((MarshalByRefObject)OrbServices.CreateProxy(typeof(MarshalByRefObject), busIOR));

            context.SetDefaultConnection(conn);

            string helloIDLType = Repository.GetRepositoryID(typeof(Hello));

            ServiceOfferDesc[] offers = null;
            try {
                // Faz o login
                conn.LoginByPassword(entity, password, domain);
                // Faz busca utilizando propriedades geradas automaticamente e propriedades definidas pelo serviço específico
                // propriedade gerada automaticamente
                ServiceProperty autoProp =
                    new ServiceProperty("openbus.component.interface", helloIDLType);
                // propriedade definida pelo serviço hello
                ServiceProperty   prop       = new ServiceProperty("offer.domain", "Demo Hello");
                ServiceProperty[] properties = { prop, autoProp };
                offers = context.OfferRegistry.findServices(properties);
            }
            catch (AccessDenied) {
                Console.WriteLine(Resources.ClientAccessDenied + entity + ".");
            }
            catch (ServiceFailure e) {
                Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                Console.WriteLine(e);
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.BusTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.BusCommFailureErrorMsg);
            }
            catch (Exception e) {
                NO_PERMISSION npe = null;
                if (e is TargetInvocationException)
                {
                    // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                    npe = e.InnerException as NO_PERMISSION;
                }
                if ((npe == null) && (!(e is NO_PERMISSION)))
                {
                    // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                    throw;
                }
                npe = npe ?? (NO_PERMISSION)e;
                if (npe.Minor == NoLoginCode.ConstVal)
                {
                    Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                }
                else
                {
                    throw;
                }
            }

            // analiza as ofertas encontradas
            bool failed = true;

            if (offers != null)
            {
                if (offers.Length < 1)
                {
                    Console.WriteLine(Resources.ServiceNotFound);
                }
                else
                {
                    if (offers.Length > 1)
                    {
                        Console.WriteLine(Resources.ServiceFoundMoreThanExpected);
                    }
                    foreach (ServiceOfferDesc serviceOfferDesc in offers)
                    {
                        Console.WriteLine(Resources.ServiceFoundTesting);
                        try {
                            MarshalByRefObject helloObj =
                                serviceOfferDesc.service_ref.getFacet(helloIDLType);
                            if (helloObj == null)
                            {
                                Console.WriteLine(Resources.FacetNotFoundInOffer);
                                continue;
                            }
                            Hello hello = helloObj as Hello;
                            if (hello == null)
                            {
                                Console.WriteLine(Resources.FacetFoundWrongType);
                                continue;
                            }
                            Console.WriteLine(Resources.OfferFound);
                            // utiliza o serviço
                            hello.sayHello();
                            failed = false;
                            break;
                        }
                        catch (TRANSIENT) {
                            Console.WriteLine(Resources.ServiceTransientErrorMsg);
                        }
                        catch (COMM_FAILURE) {
                            Console.WriteLine(Resources.ServiceCommFailureErrorMsg);
                        }
                        catch (Exception e) {
                            NO_PERMISSION npe = null;
                            if (e is TargetInvocationException)
                            {
                                // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                                npe = e.InnerException as NO_PERMISSION;
                            }
                            if ((npe == null) && (!(e is NO_PERMISSION)))
                            {
                                // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                                throw;
                            }
                            npe = npe ?? (NO_PERMISSION)e;
                            bool   found   = false;
                            string message = String.Empty;
                            switch (npe.Minor)
                            {
                            case NoLoginCode.ConstVal:
                                message = Resources.NoLoginCodeErrorMsg;
                                found   = true;
                                break;

                            case UnknownBusCode.ConstVal:
                                message = Resources.UnknownBusCodeErrorMsg;
                                found   = true;
                                break;

                            case UnverifiedLoginCode.ConstVal:
                                message = Resources.UnverifiedLoginCodeErrorMsg;
                                found   = true;
                                break;

                            case InvalidRemoteCode.ConstVal:
                                message = Resources.InvalidRemoteCodeErrorMsg;
                                found   = true;
                                break;
                            }
                            if (found)
                            {
                                Console.WriteLine(message);
                            }
                            else
                            {
                                throw;
                            }
                        }
                    }
                    if (failed)
                    {
                        Console.WriteLine(Resources.OfferFunctionalNotFound);
                    }
                }
            }

            try {
                conn.Logout();
            }
            catch (ServiceFailure e) {
                Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                Console.WriteLine(e);
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.BusTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.BusCommFailureErrorMsg);
            }
            if (!failed)
            {
                Console.WriteLine(Resources.ClientOK);
            }
            Console.ReadKey();
        }
Exemplo n.º 2
0
        private static void Main(String[] args)
        {
            // Registra handler para o caso do processo ser finalizado
            AppDomain.CurrentDomain.ProcessExit += CurrentDomainProcessExit;

            // Obtém dados através dos argumentos
            string busIOR = File.ReadAllText(args[0]);
            string entity = args[1];
            AsymmetricCipherKeyPair privateKey = Crypto.ReadKeyFile(args[2]);

            SSLUtils.InitORBWithSSL(args[3], args[4], args[5], args[6],
                                    Convert.ToUInt16(args[8]), Convert.ToUInt16(args[7]), Convert.ToBoolean(args[9]), Convert.ToBoolean(args[10]),
                                    args[11], Convert.ToBoolean(args[12]), Convert.ToBoolean(args[13]));

            // Cria o componente que conterá as facetas do servidor
            ComponentContext component =
                new DefaultComponentContext(new ComponentId("hello", 1, 0, 0, ".net"));

            // Cria a faceta Hello para o componente
            component.AddFacet("Hello", Repository.GetRepositoryID(typeof(Hello)),
                               new HelloImpl());

            // Define propriedades para a oferta de serviço a ser registrada no barramento
            IComponent ic = component.GetIComponent();

            ServiceProperty[] properties =
            {
                new ServiceProperty("offer.domain",
                                    "Demo Hello")
            };

            // Cria conexão e a define como conexão padrão tanto para entrada como saída.
            // O uso exclusivo da conexão padrão (sem uso de current e callback de despacho) só é recomendado para aplicações que criem apenas uma conexão e desejem utilizá-la em todos os casos. Para situações diferentes, consulte o manual do SDK OpenBus e/ou outras demos.
            OpenBusContext context = ORBInitializer.Context;

            _conn = context.ConnectByReference((MarshalByRefObject)OrbServices.CreateProxy(typeof(MarshalByRefObject), busIOR));
            context.SetDefaultConnection(_conn);

            bool failed = true;

            try {
                // Faz o login
                _conn.LoginByCertificate(entity, privateKey);
                // Registra a oferta no barramento
                _offer = context.OfferRegistry.registerService(ic, properties);
                failed = false;
            }
            // Login
            catch (AccessDenied) {
                Console.WriteLine(Resources.ServerAccessDenied);
            }
            catch (MissingCertificate) {
                Console.WriteLine(Resources.MissingCertificateForEntity + entity);
            }
            // Registro
            catch (UnauthorizedFacets) {
                Console.WriteLine(Resources.UnauthorizedFacets);
            }
            // Barramento
            catch (ServiceFailure e) {
                Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                Console.WriteLine(e);
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.BusTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.BusCommFailureErrorMsg);
            }
            catch (Exception e) {
                NO_PERMISSION npe = null;
                if (e is TargetInvocationException)
                {
                    // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                    npe = e.InnerException as NO_PERMISSION;
                }
                if ((npe == null) && (!(e is NO_PERMISSION)))
                {
                    // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                    throw;
                }
                npe = npe ?? (NO_PERMISSION)e;
                if (npe.Minor == NoLoginCode.ConstVal)
                {
                    Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                }
                else
                {
                    throw;
                }
            }
            finally {
                if (failed)
                {
                    Exit(1);
                }
            }

            // Mantém a thread ativa para aguardar requisições
            Console.WriteLine(Resources.ServerOK);
            Thread.Sleep(Timeout.Infinite);
        }