Я нахожусь в процессе миграции одного из веб-сервисов моей компании на новый сервер, и, к сожалению, предыдущие разработчики не оставили нам возможности протестировать миграцию этого сервиса до миграции рабочей версии. Это оставляет нас в сложной ситуации sh, когда мне приходится составлять план резервного копирования на случай, если что-то не так go при переносе на новый сервер.
Чтобы понять мой план, вы должны сначала понять, что поток выполнения для этого веб-сервиса в настоящее время:
- Платформа вызовов клиентов.
- Платформа вызывает веб-сервис.
- Веб-сервис отвечает платформе.
- Платформа отвечает клиенту.
Достаточно просто, но изменения платформы уже внесены для развертывания сразу после переключения, и разработчик не будет в доме для миграции. Таким образом, они переключат коммутатор и оставят меня в надежде, что миграция работает.
У меня есть простой план отката, при котором от разработчика платформы не потребуется откат. Я просто добавляю посредника в цепочку выше, которая действует как канал к веб-сервису для платформы:
- Клиент звонит платформе.
- Платформа звонит сервису проводов.
- Служба Conduit вызывает веб-службу.
- Веб-служба отвечает на канал.
- Проводник отвечает на платформу.
- Платформа отвечает клиенту.
Таким образом, если по какой-либо причине перенесенная версия веб-службы дает сбой, я могу вернуться к исходной версии, размещенной на старом сервере, пока мы не сможем выяснить, что отсутствует и почему все пошло не так (в настоящее время у нас нет никакого способа чтобы сделать это).
Теперь, когда у вас есть понимание проблемы, у меня есть простая проблема с записью канала в базовый веб-сервис. Я столкнулся с методом в веб-сервисе, который возвращает HttpResponseMessage
и ожидает HttpRequestMessage
в качестве запроса. Это довольно запутанно, поскольку платформа вызывает этот метод через следующий URI:
test.domain.com: порт / api / route / methodname
У меня нет доступа к коду под этим назначением URI (который находится в коде RPG), поэтому я понятия не имею, как они передают данные. В настоящее время мой код прост:
[Route("MethodName")]
[HttpPost]
public HttpResponseMessage MethodName(HttpRequestMessage request) {
try {
HttpWebRequest request = (HttpWebRequest)WebRequest.Create($"{ServiceRoute}/api/route/methodname");
request.Method = "GET";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36";
request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
return response; // There is a type mismatch, I know.
} catch (Exception e) {
// Log exception.
return null;
}
}
Как я могу позвонить в спокойный веб-сервис и передать сообщение запроса в службу?
NOTE : Я понимаю, предоставленный фрагмент кода не будет работать и содержит ошибку. Я НЕ ожидаю, что кто-то просто раздаст код. Ссылки и объяснения относительно того, что нужно сделать и почему я ищу.