C# 启用或禁用某些IP访问我的WCF服务
我正在寻找一种方法来启用或禁用某些IP访问和添加我的WCF服务作为服务引用 目前可以公开添加我们的Web服务,如何添加IP筛选器? 或者我可以使用其他设置吗 我已经了解了如何将C# 启用或禁用某些IP访问我的WCF服务,c#,web-services,wcf,C#,Web Services,Wcf,我正在寻找一种方法来启用或禁用某些IP访问和添加我的WCF服务作为服务引用 目前可以公开添加我们的Web服务,如何添加IP筛选器? 或者我可以使用其他设置吗 我已经了解了如何将添加到web.config,但是代码中的关键部分丢失了,因此无法使用 注;Web服务是一个更大项目的一部分,不能作为单独的项目分开,可以通过HTTPS(一个网站)获得。由于我认为在WCF中没有自动完成的方法,您有两个主要选择: 如果您想要安全的东西,不想实现任何东西,但您的环境使用防火墙,您可以配置防火墙以拒绝来自特定IP
添加到web.config,但是代码中的关键部分丢失了,因此无法使用
注;Web服务是一个更大项目的一部分,不能作为单独的项目分开,可以通过HTTPS(一个网站)获得。由于我认为在WCF中没有自动完成的方法,您有两个主要选择:
如果您的Web服务托管在IIS中,则可以在其中限制IP地址:
我已编辑了您的标题。请看,“,其中的共识是“不,他们不应该”。最好的方法应该是硬件防火墙,而不是你的软件应用程序!注;Web服务是更大项目的一部分,不能作为单个项目分开--更大的项目对每个人都有用。那么,您是否限制访问整个服务?或者只是服务上的操作?有多种服务吗?您是否可以控制将服务部署到web服务器?WCF服务是webforms中网站项目的一部分。我无法将WCF服务从项目中分离出来,因为这意味着要重写成千上万行代码。是的,如果这是你的问题,我可以访问IIS。好的。为了实现IP限制,不需要将WCF服务与项目分离。我想了解的是,你希望这些限制如何发挥作用。您想限制对每个人或一群人的访问吗?您说过“WCF服务是webforms中网站项目的一部分”。答案是确保将服务部署到web站点项目的单独文件夹中的IIS。如果它位于单独的文件夹中,您可以应用上述限制,而不影响任何人对网站的访问。
/// <summary>
/// Get the client IP address.
/// </summary>
private string GetClientIpAddress()
{
string result = string.Empty;
try
{
OperationContext context = OperationContext.Current;
MessageProperties messageProperties = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpointProperty = messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
result = endpointProperty.Address;
}
catch (Exception ex)
{
logger.Error(ex);
}
return result;
}
/// <summary>
/// Returns <code>true</code> if the current IP address is allowed
/// to access the webservice method, <code>false</code> otherwise.
/// </summary>
private bool CheckIPAccessRestriction()
{
bool result = false;
List<string> allowed = GetAllowedIpAddressesList();
if (allowed.Count() == 0)
{
result = true;
}
else
{
var ip = GetClientIpAddress();
result = allowed.Contains(ip);
}
return result;
}