Брандмауэр. Требуется ли входящий ответ для получения ответа, в то время как правило исходящего трафика уже существует?
Я разработал одно веб-приложение MVC, которое имеет веб-API и размещено в Amazon Instance, и одно приложение Windows для вызова этих API-интерфейсов для получения ответа от этого сервера.
Как веб-приложения, так и Windows-приложения разрабатываются в рамках asp.net 4.5 с использованием языка c #.
Приложение Windows установлено в more than 200 client's
системе, которая является высокозащищенным сервером, и все входящие порты заблокированы в брандмауэре.
Я использую HttpWebRequest с BindIPEndPoint для вызова веб-API с использованием настроенного диапазона портов TCP [default 7777-7786]
.
API-вызовы работают нормально из приложения Windows, если существуют правила разрешенного входящего и исходящего брандмауэра.
Но проблема в том, что клиенты не разрешают мне какие-либо правила Inbound Firewall, они только разрешают правила Outbound Firewall для этих диапазонов портов, а приложение Windows не работает с заблокированными правилами входящих соединений для этих диапазонов портов.
Нужно ли мне открывать входящее правило в брандмауэре для этого диапазона портов для вызова / получения запроса / ответа на / от API? Если вам не нужно правило Inbound Firewall, объясните, почему?
Ниже приведен вызов API, который использует один статический порт TCP в моем приложении Windows :
try { string address = RevWatchURL; address = address + "api/GetRevGuardLatestPatch"; HttpWebRequest httpWebRequest = WebRequest.Create(address) as HttpWebRequest; httpWebRequest.ContentType = "text/json"; httpWebRequest.Method = "POST"; httpWebRequest.Timeout = 300000; httpWebRequest.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(CommonValues.BindIPEndPointCallbackRGPatch); string enRevGuardUniqueId = Encryption.EncryptionTechnique(Convert.ToString(UniqueId), null, null); using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = "{\"UniqueId\":\"" + enRevGuardUniqueId + "\"}"; streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); } try { var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { returnVal = streamReader.ReadToEnd(); streamReader.Close(); httpResponse.Close(); } } catch (WebException ex) { } finally { httpWebRequest.Abort(); } Obj = JsonConvert.DeserializeObject<CommonValues.RevGuardPatchClass>(returnVal); } catch (Exception ex) { MessageBox.Show("Error", "API", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); }
Метод BindIPEndPoint:
public static IPEndPoint BindIPEndPointCallbackRGPatch(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount) { return new IPEndPoint(IPAddress.Any, 7777); }
0 ответов на вопрос
Похожие вопросы
-
2
Windows 7 Home Premium запоминает пароли общего доступа к сети?
-
5
Поделитесь XP сетевым подключением без перезагрузки?
-
5
Как мне сказать Windows использовать 802.11 вместо 3G?
-
-
4
Есть ли способ поделиться сканером многофункционального принтера?
-
3
Есть ли способ соединить два компьютера через USB?
-
4
Замена для ZoneAlarm на 64-битных системах?
-
3
Как сохранить несколько подключений к интернету?
-
9
Заставить веб-адрес проходить через HTTPS
-
4
iPod-Touch для воспроизведения фильмов с ПК на PS3?
-
2
Mac не присоединится к рабочей группе Windows