public SPServiceApplicationProxy CreateProxy(string name, bool checkIfExist, SPServiceApplication serviceApplication, SPServiceProvisioningContext provisioningContext)
        {
            if (serviceApplication == null)
            {
                throw new ArgumentNullException("serviceApplication");
            }

            Type serviceApplicationType = serviceApplication.GetType();

            if (serviceApplicationType == null || serviceApplicationType != typeof(ParagoServiceApplication))
            {
                throw new NotSupportedException();
            }

            ParagoServiceProxy serviceProxy = (ParagoServiceProxy)Farm.GetObject(ParagoServiceProxy.DefaultName, Farm.Id, typeof(ParagoServiceProxy));

            if (serviceProxy == null)
            {
                serviceProxy = new ParagoServiceProxy(Farm);
                serviceProxy.Update(true);
                serviceProxy.Provision();
            }

            if (checkIfExist)
            {
                ParagoServiceApplicationProxy serviceApplicationProxy = serviceProxy.ApplicationProxies.GetValue <ParagoServiceApplicationProxy>(name);

                if (serviceApplicationProxy != null)
                {
                    return(serviceApplicationProxy);
                }
            }

            return(new ParagoServiceApplicationProxy(name, serviceProxy, ((ParagoServiceApplication)serviceApplication).Uri));
        }
        public static ParagoServiceApplicationProxy GetServiceApplicationProxy(string applicationName)
        {
            ParagoServiceApplication application = GetServiceApplication(applicationName);

            if (application != null)
            {
                ParagoServiceProxy serviceProxy = ParagoServiceProxy.Local;

                if (serviceProxy != null)
                {
                    foreach (ParagoServiceApplicationProxy serviceApplicationProxy in serviceProxy.ApplicationProxies)
                    {
                        if (serviceApplicationProxy.Name == application.Name)
                        {
                            return(serviceApplicationProxy);
                        }
                    }
                }
            }

            return(null);
        }
        public static ParagoService CreateParagoServiceWithServiceInstance()
        {
            SPFarm   farm   = SPFarm.Local;
            SPServer server = SPServer.Local;

            if (farm == null)
            {
                throw new InvalidOperationException("No farm object available");
            }
            if (server == null)
            {
                throw new InvalidOperationException("No server object available");
            }

            ParagoService         service         = ParagoService.Local;
            ParagoServiceInstance serviceInstance = null;
            ParagoServiceProxy    serviceProxy    = null;

            if (service == null)
            {
                // NOTE: There cases when service class got not detected, but is still avialable.
                // ---
                service = new ParagoService(farm);

                try
                {
                    service.Unprovision();
                }
                catch
                {
                }

                try
                {
                    service.Delete();
                }
                catch
                {
                }
                // ---

                // NOTE: Must be set new after Delete is called!
                service = new ParagoService(farm);

                try
                {
                    service.Update();

                    if (service.Status != SPObjectStatus.Online)
                    {
                        service.Provision();
                    }

                    serviceInstance = server.ServiceInstances.GetValue <ParagoServiceInstance>(ParagoServiceInstance.DefaultName);

                    if (serviceInstance == null)
                    {
                        serviceInstance = new ParagoServiceInstance(server, service);
                        serviceInstance.Update();
                    }

                    // NOTE: Provisioning the service instance will create the IIS web service, when first service
                    // appliation will be created, otherwise it will not work!
                    if (serviceInstance.Status != SPObjectStatus.Online)
                    {
                        serviceInstance.Provision();
                    }

                    serviceProxy = farm.ServiceProxies.GetValue <ParagoServiceProxy>(ParagoServiceProxy.DefaultName);

                    if (serviceProxy == null)
                    {
                        serviceProxy = new ParagoServiceProxy(farm);
                        serviceProxy.Update();
                    }

                    if (serviceProxy.Status != SPObjectStatus.Online)
                    {
                        serviceProxy.Provision();
                    }
                }
                catch
                {
                    try
                    {
                        if (serviceProxy != null)
                        {
                            if (serviceProxy.Status == SPObjectStatus.Online)
                            {
                                serviceProxy.Unprovision();
                            }

                            serviceProxy.Delete();
                        }

                        if (serviceInstance != null)
                        {
                            if (serviceInstance.Status == SPObjectStatus.Online)
                            {
                                serviceInstance.Unprovision();
                            }

                            serviceInstance.Delete();
                        }

                        if (service != null)
                        {
                            if (service.Status == SPObjectStatus.Online)
                            {
                                service.Unprovision();
                            }

                            service.Delete();
                        }
                    }
                    catch { }

                    throw;
                }
            }

            return(service);
        }
 public ParagoServiceApplicationProxy(string name, ParagoServiceProxy serviceProxy, Uri serviceApplicationAddress)
     : base(name, serviceProxy, serviceApplicationAddress)
 {
     _loadBalancer = new SPRoundRobinServiceLoadBalancer(serviceApplicationAddress);
 }