防火墙:当出站规则已经存在时,是否需要入站才能获得响应?

时间:2016-10-13 12:54:19

标签: asp.net sockets networking tcp firewall

我开发了一个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);
}

0 个答案:

没有答案