我开发了一个具有 Web API 并托管在 Amazon 实例中的 MVC Web 应用程序,以及一个用于调用这些 API 以从该服务器获取响应的 Windows 应用程序。
Web 和 Windows 应用程序均使用 c# 语言在 asp.net framework 4.5 中开发。
Windows 应用程序安装在more than 200 client's
系统中,该系统本身是高度安全的服务器,防火墙中的所有入站端口均被阻止。
我正在使用带有 BindIPEndPoint 的 HttpWebRequest 来使用配置的 TCP 端口范围调用 Web API [default 7777-7786]
。
如果有允许入站和出站防火墙规则,Windows 应用程序的 API 调用可以正常工作。
但问题是客户端不允许我使用任何入站防火墙规则,它们只允许针对这些端口范围使用出站防火墙规则,并且 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);
}