public void Alter()
        {
            BrokerService    brokerService;
            ExtendedProperty prop = null;

            if (this.ServiceBroker.Services.Contains(this.FullName))
            {
                brokerService = this.ServiceBroker.Services[this.FullName];

                brokerService.QueueName = this.QueueName;

                //Drop Contracts that user removed
                foreach (ServiceContractMapping map in brokerService.ServiceContractMappings)
                {
                    if (!this.ContractNames.Contains(map.Name))
                    {
                        if (map.State != SqlSmoState.ToBeDropped)
                        {
                            map.MarkForDrop(true);
                        }
                    }
                }
                //Add Contracts that user added
                foreach (string name in this.ContractNames)
                {
                    if (!brokerService.ServiceContractMappings.Contains(name))
                    {
                        ServiceContractMapping brokerServiceContract
                            = new ServiceContractMapping(brokerService, name);
                        brokerService.ServiceContractMappings.Add(brokerServiceContract);
                    }
                }

                brokerService.Alter();

                //Drop RemoteServiceBinding and Certificate
                if (!m_EnableRemoteServiceBinding)
                {
                    if (this.ServiceBroker.RemoteServiceBindings.Contains(this.BindingFullName))
                    {
                        RemoteServiceBinding binding = this.ServiceBroker.
                                                       RemoteServiceBindings[this.BindingFullName];
                        binding.Drop();
                    }

                    this.DropCertificate();
                    //Drop extended property
                    if (brokerService.ExtendedProperties.Contains("CertificateName"))
                    {
                        brokerService.ExtendedProperties["CertificateName"].Drop();
                    }
                }

                //Change RemoteServiceBinding
                if (m_EnableRemoteServiceBinding && !String.IsNullOrEmpty(this.ServiceOwnerName))
                {
                    if (this.ServiceBroker.RemoteServiceBindings.Contains(this.BindingFullName))
                    {
                        RemoteServiceBinding binding = this.ServiceBroker.
                                                       RemoteServiceBindings[this.BindingFullName];
                        binding.IsAnonymous = this.AllowAnonymous;
                        //Can't change service owner binding.Owner = this.ServiceOwnerName;

                        binding.Alter();
                    }
                }

                //Create Certificate if EnableRemoteServiceBinding = true and AllowAnonymous = false
                if (m_EnableRemoteServiceBinding &&
                    !String.IsNullOrEmpty(this.ServiceOwnerName) && !this.AllowAnonymous)
                {
                    if (!brokerService.ExtendedProperties.Contains("CertificateName"))
                    {
                        prop = new ExtendedProperty(brokerService,
                                                    "CertificateName", this.Certificate.Name);
                    }

                    this.Certificate.Owner = this.ServiceOwnerName;
                    this.Certificate.Create();
                }

                //Create ReportServiceBinding
                if (m_EnableRemoteServiceBinding && !String.IsNullOrEmpty(this.ServiceOwnerName))
                {
                    this.CreateRemoteServiceBinding();
                }

                if (this.GrantReceive)
                {
                    CreateGrantReceive();
                }

                //Create property last
                if (prop != null)
                {
                    prop.Create();
                }
            }
        }
示例#2
0
        internal static void DeploySsbObj(object obj, string svrName, string dbName, SsbEnum ssbType, bool isEdit)
        {
            Server               svr  = CreateServer(svrName, null, null);
            Database             db   = svr.Databases[dbName];
            ServiceBroker        sb   = db.ServiceBroker;
            MessageType          mt   = null;
            ServiceContract      sc   = null;
            ServiceQueue         q    = null;
            BrokerService        serv = null;
            ServiceRoute         rt   = null;
            RemoteServiceBinding bind = null;

            try {
                switch (ssbType)
                {
                case SsbEnum.MessageType:
                    MessageType mtNew = new MessageType();
                    mtNew.Parent = sb;
                    mt           = (MessageType)obj;
                    mtNew.Name   = mt.Name;
                    mtNew.MessageTypeValidation = mt.MessageTypeValidation;
                    if (mt.MessageTypeValidation == MessageTypeValidation.XmlSchemaCollection)
                    {
                        mtNew.ValidationXmlSchemaCollection = mt.ValidationXmlSchemaCollection;
                    }

                    if (isEdit)
                    {
                        mtNew.Alter();
                    }
                    else
                    {
                        mtNew.Create();
                    }

                    break;

                case SsbEnum.Contract:
                    ServiceContract scNew = new ServiceContract();
                    sc           = (ServiceContract)obj;
                    scNew.Parent = sb;
                    scNew.Name   = sc.Name;
                    foreach (MessageTypeMapping mtm in sc.MessageTypeMappings)
                    {
                        if (!sb.MessageTypes.Contains(mtm.Name))
                        {
                            ServiceBroker sbParent = sc.Parent;
                            MessageType   mtp      = sbParent.MessageTypes[mtm.Name];
                            DeploySsbObj(mtp, svrName, dbName, SsbEnum.MessageType, false);
                        }

                        MessageTypeMapping mtmNew = new MessageTypeMapping();
                        mtmNew.Name          = mtm.Name;
                        mtmNew.Parent        = scNew;
                        mtmNew.MessageSource = mtm.MessageSource;
                        scNew.MessageTypeMappings.Add(mtmNew);
                    }

                    if (isEdit)
                    {
                        scNew.Alter();
                    }
                    else
                    {
                        scNew.Create();
                    }

                    break;

                case SsbEnum.Queu:
                    q        = (ServiceQueue)obj;
                    q.Parent = sb;

                    if (isEdit)
                    {
                        q.Alter();
                    }
                    else
                    {
                        q.Create();
                    }

                    break;

                case SsbEnum.Service:
                    serv        = (BrokerService)obj;
                    serv.Parent = sb;

                    if (isEdit)
                    {
                        serv.Alter();
                    }
                    else
                    {
                        serv.Create();
                    }

                    break;

                case SsbEnum.Route:
                    rt        = (ServiceRoute)obj;
                    rt.Parent = sb;

                    if (isEdit)
                    {
                        rt.Alter();
                    }
                    else
                    {
                        rt.Create();
                    }

                    break;

                case SsbEnum.RemoteBinding:
                    bind        = (RemoteServiceBinding)obj;
                    bind.Parent = sb;

                    if (isEdit)
                    {
                        bind.Alter();
                    }
                    else
                    {
                        bind.Create();
                    }

                    break;
                }
            }
            catch (FailedOperationException e) {
                string err = string.Format("{0}", e.InnerException);
                //throw;
            }
            catch (Exception ex) {
                string errx = string.Format("{0}", ex.InnerException);
            }

            finally {
                svr.ConnectionContext.Disconnect();
            }
        }