예제 #1
0
        /// <summary>
        /// Create a Standard tier Serverless instance of SignalR service in the given resource group.
        /// </summary>
        /// <param name="resourceGroup"></param>
        /// <param name="signalRName"></param>
        /// <param name="tags"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <SignalRResource> CreateAsync(
            IResourceGroup resourceGroup,
            string signalRName,
            IDictionary <string, string> tags   = null,
            CancellationToken cancellationToken = default
            )
        {
            if (resourceGroup is null)
            {
                throw new ArgumentNullException(nameof(resourceGroup));
            }
            if (string.IsNullOrEmpty(signalRName))
            {
                throw new ArgumentNullException(nameof(signalRName));
            }

            try {
                tags ??= new Dictionary <string, string>();

                Log.Information($"Creating SignalR Service: {signalRName} ...");

                var serviceModeFeature = new SignalRFeature {
                    Flag  = ServiceMode.Serverless.Flag,
                    Value = ServiceMode.Serverless.Value
                };

                var signalRCreateParameters = new SignalRResource()
                {
                    Location = resourceGroup.RegionName,
                    Tags     = tags,

                    Sku = new ResourceSku {
                        Name     = "Standard_S1",
                        Tier     = "Standard",
                        Capacity = 1,
                    },
                    HostNamePrefix = signalRName,
                    Features       = new List <SignalRFeature> {
                        serviceModeFeature
                    }
                };

                signalRCreateParameters.Validate();

                var signalR = await _signalRManagementClient
                              .SignalR
                              .CreateOrUpdateAsync(
                    resourceGroup.Name,
                    signalRName,
                    signalRCreateParameters,
                    cancellationToken
                    );

                Log.Information($"Created SignalR Service: {signalRName}");

                return(signalR);
            }
            catch (Exception ex) {
                Log.Error(ex, $"Failed ot create SignalR Service: {signalRName}");
                throw;
            }
        }