Я разработал одно веб-приложение MVC, которое имеет веб-API и размещено в экземпляре Amazon, и одно приложение Windows для вызова этих API для получения ответа от этого сервера.
И веб-приложения, и приложения для Windows разрабатываются в asp.net framework 4.5 с использованием языка C #.
Приложение Windows установлено в more than 200 client's
система, которая сама по себе является высокозащищенными серверами со всеми входящими портами, заблокированными в брандмауэре.
Я использую HttpWebRequest с BindIPEndPoint для вызова веб-API с использованием настроенного диапазона портов TCP [default 7777-7786]
.
Вызовы API работают нормально из приложения Windows, если есть разрешающие правила брандмауэра для входящего и исходящего трафика.
Но проблема в том, что клиенты не разрешают мне никаких правил брандмауэра для входящего трафика, они разрешают только правила брандмауэра для исходящего трафика для этого диапазона портов. И приложение Windows не работает с заблокированными правилами для входящего трафика для этого диапазона портов.
Нужно ли мне открывать правило входящего трафика в брандмауэре для этого диапазона портов для вызова / получения запроса / ответа на / от API? Если правило брандмауэра для входящего трафика не требуется, объясните, почему?
Ниже Вызов 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);
}