Как определить, является ли среда промежуточной или рабочей в роли сервисного работника, размещенного на Azure? - PullRequest
6 голосов
/ 12 сентября 2011

У меня есть рабочая роль в моем размещенном сервисе. Работник отправляет электронную почту ежедневно. Но в размещенном сервисе есть 2 среды, Staging и Production. Так что моя рабочая роль отправляет электронную почту 2 раза в день. Я хотел бы знать, как определить, находится ли работник на стадии или на производстве. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

По моему вопросу здесь , вы увидите, что быстрый способ сделать это не существует.Кроме того, если вы действительно не знаете, что делаете, я настоятельно рекомендую вам не делать этого .

Однако, если вы хотите, вы можете использовать действительно хорошую библиотеку ( AzureУправление сервисом через C # ), хотя у нас были некоторые проблемы с использованием WCF.

Вот краткий пример того, как это сделать (обратите внимание, вам необходимо включить сертификат управлениякак ресурс в вашем коде и разверните его в Azure):

 private static bool IsStaging()
        {
            try
            {
                if (!CloudEnvironment.IsAvailable)
                    return false;

                const string certName = "AzureManagement.pfx";
                const string password = "Pa$$w0rd";

                // load certificate
                var manifestResourceStream = typeof(ProjectContext).Assembly.GetManifestResourceStream(certName);
                if (manifestResourceStream == null)
                {
                    // should we panic?
                    return true;
                }

                var bytes = new byte[manifestResourceStream.Length];
                manifestResourceStream.Read(bytes, 0, bytes.Length);

                var cert = new X509Certificate2(bytes, password);

                var serviceManagementChannel = Microsoft.Toolkit.WindowsAzure.ServiceManagement.ServiceManagementHelper.
                    CreateServiceManagementChannel("WindowsAzureServiceManagement", cert);

                using (new OperationContextScope((IContextChannel)serviceManagementChannel))
                {
                    var hostedServices =
                        serviceManagementChannel.ListHostedServices(WellKnownConfiguration.General.SubscriptionId);

                    // because we don't know the name of the hosted service, we'll do something really wasteful
                    // and iterate
                    foreach (var hostedService in hostedServices)
                    {
                        var ad =
                            serviceManagementChannel.GetHostedServiceWithDetails(
                                WellKnownConfiguration.General.SubscriptionId,
                                hostedService.ServiceName, true);

                        var deployment =
                            ad.Deployments.Where(
                                x => x.PrivateID == Zebra.Framework.Azure.CloudEnvironment.CurrentRoleInstanceId).
                                FirstOrDefault
                                ();

                        if (deployment != null)
                        {
                            return deployment.DeploymentSlot.ToLower().Equals("staging");
                        }
                    }
                }

                return false;
            }
            catch (Exception e)
            {
                // if something went wrong, let's not panic
                TraceManager.AzureFrameworkTraceSource.TraceData(System.Diagnostics.TraceEventType.Error, "Exception", e);
                return false;
            }
        }
0 голосов
/ 30 апреля 2015

Если вы используете SQL-сервер (либо Azure SQL, либо SQL-сервер, размещенный в виртуальной машине), вы можете помешать рабочей роли промежуточной рабочей среды выполнять работу, разрешив только общедоступный IP-адрес производственного экземпляра для доступа к серверу базы данных.

...