我开发了一个MVC Web应用程序,它具有Web API并托管在Amazon Instance中,还有一个Windows应用程序用于调用这些API以从该服务器获取响应。
Web应用程序和Windows应用程序都是使用c#语言在asp.net framework 4.5中开发的。
Windows应用程序安装在more than 200 client's
系统中,这是一个高度安全的服务器,它自动阻止防火墙中的所有入站端口。
我正在使用HttpWebRequest和BindIPEndPoint一起使用配置的TCP端口范围[default 7777-7786]
来调用Web API。
API调用在Windows应用程序中正常工作。
但问题是客户端不允许任何入站防火墙规则,它们只允许那些端口范围的出站防火墙规则而Windows应用程序不能使用这些端口范围的阻止入站规则。
我是否必须在防火墙中打开入站规则以获取调用/获取API请求/响应的端口范围?如果不需要入站防火墙规则,请解释为什么?
以下是 API调用,它在我的 Windows应用程序中使用一个静态TCP端口:
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);
}