Есть ли где-нибудь в времени выполнения службы, которые скажут мне, если я сейчас работаю на «постановке» или «производстве»? Вручную изменять конфигурацию в и из производства представляется немного громоздкой.Этап производства или производства?
ответ
Вы действительно не должны изменять свои конфигурации, когда находитесь на основе, если вы находитесь в Prod или Staging. Промежуточная область не предназначена для среды «QA», но только область хранения перед развертыванием.
Когда вы загружаете новое развертывание, текущий слот развертывания, в котором вы загружаете свой пакет, уничтожается и заканчивается на 10-15 минут при загрузке и запуске виртуальных машин. Если вы загружаете прямо в производство, это составляет 15 минут простоя производства. Таким образом, была создана область постановки: вы загружаетесь в стадию, проверяете материал и нажимаете кнопку «своп», а ваша среда постановки волшебным образом становится производством (виртуальный обмен IP). Таким образом, ваша постановка должна быть на самом деле на 100% такой же, как ваша постановка.
Что я думаю, что вы ищете, это QA/тестовая среда? Вы должны открыть новый сервис для среды тестирования с помощью собственного Prod/Staging. В этом случае вам нужно будет поддерживать несколько наборов конфигурационных файлов, по одному для каждой среды развертывания (Production, Testing и т. Д.).
Существует множество способов управления конфигурацией - ад, который происходит, особенно с Azure, который имеет верхнюю часть файлов .config, собственных * .cscfg файлов. Способ, которым я предпочитаю делать это с проектом Azure, выглядит следующим образом: Настройте небольшой проект Config, создайте там папки, соответствующие типам развертывания. Внутри каждой папки установлены наборы файлов * .config & * .cscfg, которые соответствуют конкретной среде развертывания: Debug, Test, Release ... они также настраиваются в Visual Studio, а также в качестве типов целевых объектов. У меня есть небольшая команда xcopy, которая возникает во время каждой компиляции проекта Config, которая копирует все файлы из папки «Создать целевой объект» проекта Config в корневую папку проекта Config.
Затем каждый другой проект в решении, ССЫЛКИ на .config или .cscfg файл из корневой папки проекта Config.
Voila, мои конфиги волшебным образом адаптируются к каждой конфигурации сборки автоматически. Я также использую преобразования .config для управления информацией об отладке для целей выпуска Release и non-Release.
Если вы читали все это и по-прежнему хотят получить на производства против статуса стадирования во время выполнения, затем: Получить deploymentId
от RoleEnvironment.DeploymentId
Затем с помощью API управления с надлежащим X509 certificate
получить на Azure structure of your Service
и вызовите метод GetDeployments
(это api rest, но есть библиотека абстракции).
Надеется, что это помогает
Edit: блог с просьбой об установке строк конфигурации и переключение между средами @http://blog.paraleap.com/blog/post/Managing-environments-in-a-distributed-Azure-or-other-cloud-based-NET-solution
Балетмейстер является временной слот развертывания используется в основном для обновления не-времени простоя и возможности катиться назад обновление.
Рекомендуется не связывать вашу систему (либо в коде, либо в конфиге) с такими свойствами Azure.
Вот 4 балла рассмотреть
- VIP своп имеет смысл только, когда ваша служба сталкивается с внешним миром.AKA, когда он предоставляет API и реагирует на запросы.
- Если ваша служба действительно выводит сообщения из очереди и обрабатывает их, то ваши услуги являются проактивными, а VIP-обмен не является хорошим решением для вас.
- Если ваша услуга является реактивной и активной, вы можете пересмотреть свой дизайн. Возможно, разделить услугу на две разные службы.
- Рекомендация Эрика о модификации файлов cscfg pre и post-VIP хороша, если проактивная часть вашей службы может занять короткое время простоя (поскольку вы сначала настраиваете как Staging, так и Production, чтобы не вытаскивать сообщения, затем выполните команду VIP Swap , а затем обновить конфигурацию Production, чтобы начать вытягивание сообщений).
Иногда я хотел бы люди просто ответить на этот вопрос .. не объяснить этики или лучшие практики ...
Microsoft опубликовал образец кода делает именно это здесь: https://code.msdn.microsoft.com/windowsazure/CSAzureDeploymentSlot-1ce0e3b5
protected void Page_Load(object sender, EventArgs e)
{
// You basic information of the Deployment of Azure application.
string deploymentId = RoleEnvironment.DeploymentId;
string subscriptionID = "<Your subscription ID>";
string thrumbnail = "<Your certificate thumbnail print>";
string hostedServiceName = "<Your hosted service name>";
string productionString = string.Format(
"https://management.core.windows.net/{0}/services/hostedservices/{1}/deploymentslots/{2}",
subscriptionID, hostedServiceName, "Production");
Uri requestUri = new Uri(productionString);
// Add client certificate.
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly);
X509Certificate2Collection collection = store.Certificates.Find(
X509FindType.FindByThumbprint, thrumbnail, false);
store.Close();
if (collection.Count != 0)
{
X509Certificate2 certificate = collection[0];
HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(requestUri);
httpRequest.ClientCertificates.Add(certificate);
httpRequest.Headers.Add("x-ms-version", "2011-10-01");
httpRequest.KeepAlive = false;
HttpWebResponse httpResponse = httpRequest.GetResponse() as HttpWebResponse;
// Get response stream from Management API.
Stream stream = httpResponse.GetResponseStream();
string result = string.Empty;
using (StreamReader reader = new StreamReader(stream))
{
result = reader.ReadToEnd();
}
if (result == null || result.Trim() == string.Empty)
{
return;
}
XDocument document = XDocument.Parse(result);
string serverID = string.Empty;
var list = from item
in document.Descendants(XName.Get("PrivateID",
"http://schemas.microsoft.com/windowsazure"))
select item;
serverID = list.First().Value;
Response.Write("Check Production: ");
Response.Write("DeploymentID : " + deploymentId
+ " ServerID :" + serverID);
if (deploymentId.Equals(serverID))
lbStatus.Text = "Production";
else
{
// If the application not in Production slot, try to check Staging slot.
string stagingString = string.Format(
"https://management.core.windows.net/{0}/services/hostedservices/{1}/deploymentslots/{2}",
subscriptionID, hostedServiceName, "Staging");
Uri stagingUri = new Uri(stagingString);
httpRequest = (HttpWebRequest)HttpWebRequest.Create(stagingUri);
httpRequest.ClientCertificates.Add(certificate);
httpRequest.Headers.Add("x-ms-version", "2011-10-01");
httpRequest.KeepAlive = false;
httpResponse = httpRequest.GetResponse() as HttpWebResponse;
stream = httpResponse.GetResponseStream();
result = string.Empty;
using (StreamReader reader = new StreamReader(stream))
{
result = reader.ReadToEnd();
}
if (result == null || result.Trim() == string.Empty)
{
return;
}
document = XDocument.Parse(result);
serverID = string.Empty;
list = from item
in document.Descendants(XName.Get("PrivateID",
"http://schemas.microsoft.com/windowsazure"))
select item;
serverID = list.First().Value;
Response.Write(" Check Staging:");
Response.Write(" DeploymentID : " + deploymentId
+ " ServerID :" + serverID);
if (deploymentId.Equals(serverID))
{
lbStatus.Text = "Staging";
}
else
{
lbStatus.Text = "Do not find this id";
}
}
httpResponse.Close();
stream.Close();
}
}
С Windows Azure Management Libraries и благодаря @GuaravMantri answer на другой вопрос, вы можете сделать это следующим образом:
using System;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using Microsoft.Azure;
using Microsoft.WindowsAzure.Management.Compute;
using Microsoft.WindowsAzure.Management.Compute.Models;
namespace Configuration
{
public class DeploymentSlotTypeHelper
{
static string subscriptionId = "<subscription-id>";
static string managementCertContents = "<Base64 Encoded Management Certificate String from Publish Setting File>";// copy-paste it
static string cloudServiceName = "<your cloud service name>"; // lowercase
static string ns = "http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration";
public DeploymentSlot GetSlotType()
{
var managementCertificate = new X509Certificate2(Convert.FromBase64String(managementCertContents));
var credentials = new CertificateCloudCredentials(subscriptionId, managementCertificate);
var computeManagementClient = new ComputeManagementClient(credentials);
var response = computeManagementClient.HostedServices.GetDetailed(cloudServiceName);
return response.Deployments.FirstOrDefault(d => d.DeploymentSlot == DeploymentSlot.Production) == null ? DeploymentSlot.Staging : DeploymentSlot.Production;
}
}
}
Простой способ решения этой проблемы является установка на экземплярам ключ, чтобы определить в каких условиях он работает.
1) Устанавливается в вашем рабочем слоте: Установить его Настройки >> Настройки приложения >> Настройки приложения И создать ключ с именем SLOT_NAME и значение «production». ВАЖНО: проверьте настройку слота.
2) Установите в своем промежуточном слоте: Установите его Настройки >> Параметры приложения >> Настройки приложения И создайте ключ с именем SLOT_NAME и введите значение «staging». ВАЖНО: проверьте настройку слота.
Доступ из вашего приложения к переменной и определение среды, в которой работает приложение. В Java вы можете получить доступ:
String slotName = System.getenv("APPSETTING_SLOT_NAME");
- 1. Play 2.3 Действие не найдено в режиме производства (начало, этап)
- 2. Dynatree или Fancytree для производства?
- 3. производства assetic
- 4. Ошибка производства
- 5. производства IEnumerable
- 6. LAMP, XAMPP для производства
- 7. Minify Extjs4 для производства
- 8. Развертывание приложения Node.js для производства
- 9. .Net производства CSV файл
- 10. Угловая сборка для производства
- 11. производства конкретного ошибка маршрутизации
- 12. IdentityServer 4 для производства
- 13. Mock в коде производства
- 14. принципов для производства сайта
- 15. Дженкинс для развертывания производства
- 16. Использование MemoryStore производства
- 17. Защита django от производства
- 18. MongoDB writeConcern для производства
- 19. Местный STS для производства
- 20. Rails Режим производства Пассажир
- 21. Logcat в процессе производства
- 22. Мониторинг производства веб-приложений
- 23. CSS или макет проблемы с землемером производства
- 24. MongoDB или CouchDB - подходит для производства?
- 25. Обнаружение лазурной сцены или производства Microsoft.WindowsAzure.ServiceRuntime
- 26. XDocument производства недопустимого XML
- 27. Рельсы Amazon ошибка производства
- 28. Мониторинг производства пружинной загрузки
- 29. Развертывание ClickOnce для производства
- 30. Примеры производства Graphql & Relay
Hi Igorek, можете ли вы предоставить нам несколько примеров кода или пошаговое руководство с ним? У меня также проблемы с web.config в Azure за среду .... – 2011-01-19 11:43:47
+1 для Игорека, чтобы написать блог-постер об этом :) – Slav 2011-02-20 12:58:23
Восемь месяцев спустя, но вот он: http://www.paraleap.com/ блог/сообщение/Управление-среда-в-распределенном-Azure-or-other-cloud-based-NET-solution.aspx – Igorek 2011-09-13 02:17:37