public void Create() { if (!this.ServiceBroker.Queues.Contains(this.FullName)) { // Create queue ServiceQueue queue = new ServiceQueue( this.ServiceBroker, this.FullName, "dbo"); this.FillQueueObject(queue); queue.Create(); } }
static void Main(string[] args) { Server svr = new Server("localhost"); Console.WriteLine("Language: " + svr.Information.Language); Console.WriteLine("OS version: " + svr.Information.OSVersion); Console.WriteLine("Edition: " + svr.Information.Edition); Console.WriteLine("Root directory: " + svr.Information.RootDirectory); // Create a new database Database db = new Database(svr, "Chapter12_SMOSample"); db.Create(); // Create the required message types MessageType requestMessage = new MessageType(db.ServiceBroker, "RequestMessage"); MessageType responseMessage = new MessageType(db.ServiceBroker, "ResponseMessage"); requestMessage.Create(); responseMessage.Create(); // Create the service contract ServiceContract contract = new ServiceContract(db.ServiceBroker, "SampleContract"); contract.MessageTypeMappings.Add(new MessageTypeMapping(contract, "RequestMessage", Microsoft.SqlServer.Management.Smo.Broker.MessageSource.Initiator)); contract.MessageTypeMappings.Add(new MessageTypeMapping(contract, "ResponseMessage", Microsoft.SqlServer.Management.Smo.Broker.MessageSource.Target)); contract.Create(); // Create the queue ServiceQueue queue = new ServiceQueue(db.ServiceBroker, "SampleQueue"); queue.Create(); // Create the Service Broker service BrokerService service = new BrokerService(db.ServiceBroker, "SampleService"); service.QueueName = "SampleQueue"; service.ServiceContractMappings.Add(new ServiceContractMapping(service, "SampleContract")); service.Create(); // Retrieve Service Broker information through SMO foreach (MessageType messageType in db.ServiceBroker.MessageTypes) { Console.WriteLine(messageType.Name); } foreach (ServiceContract serviceContract in db.ServiceBroker.ServiceContracts) { Console.WriteLine(serviceContract.Name); } foreach (ServiceQueue serviceQueue in db.ServiceBroker.Queues) { Console.WriteLine(serviceQueue.Name); Console.WriteLine("\tActivation enabled:" + serviceQueue.IsActivationEnabled); Console.WriteLine("\tMax Queue Readers: " + serviceQueue.MaxReaders); Console.WriteLine("\tProcedure name: " + serviceQueue.ProcedureName); } foreach (BrokerService brokerService in db.ServiceBroker.Services) { Console.WriteLine(brokerService.Name); Console.WriteLine("\tQueue name: " + brokerService.QueueName); } Console.ReadLine(); }
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(); } }