Eu desenvolvi um aplicativo da Web MVC que tem APIs da Web e hospedado no Amazon Instance e um aplicativo do Windows para chamar essas APIs para obter resposta desse servidor.
Ambos os aplicativos da Web e do Windows são desenvolvidos no framework asp.net 4.5 usando a linguagem c #.
O aplicativo do Windows é instalado em more than 200 client's
system, que são servidores altamente seguros, com todas as portas de entrada bloqueadas no Firewall.
Estou usando o HttpWebRequest com o BindIPEndPoint para chamar APIs da Web usando o intervalo de portas TCP [default 7777-7786]
.
Chamadas API funcionam bem no Aplicativo do Windows, se houver Permitir Regras de Firewall de Entrada e Saída.
Mas o problema é que os clientes não estão me permitindo nenhuma regra do Inbound Firewall, eles somente permitem regras de Firewall de Saída para esses intervalos de portas. E o aplicativo Windows não está funcionando com regras de entrada bloqueadas para esse intervalo de portas.
É necessário abrir a Regra de Entrada no Firewall para esse intervalo de portas para chamar / obter solicitação / resposta para / de APIs? Se não houver necessidade de regra do firewall de entrada, por favor, explique por quê?
Abaixo está a chamada de API que usa uma porta TCP estática no meu aplicativo do 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);
}
Método do BindIPEndPoint:
public static IPEndPoint BindIPEndPointCallbackRGPatch(ServicePoint servicePoint,
IPEndPoint remoteEndPoint, int retryCount)
{
return new IPEndPoint(IPAddress.Any, 7777);
}
Tags networking sockets firewall asp.net tcp