在负载平衡情况下使用 WCF 4.5 RemoteEndpointMessageProperty 获取客户端 IP 地址

2024-01-09

我在 IIS 中托管了 WCF 4.5 Restful 服务,我正在尝试使用 RemoteEndpointMessageProperty 获取客户端的 IP 地址 消耗该服务。

Code 1:

private string GetClientIP()
{
  OperationContext context = OperationContext.Current;
  MessageProperties prop = context.IncomingMessageProperties;
  RemoteEndpointMessageProperty endpoint =
         prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
  string ip = endpoint.Address;
  return ip;
}

Code 2:

private string GetClientIP()
{
  string retIp = string.Empty;
  OperationContext context = OperationContext.Current;
  MessageProperties prop = context.IncomingMessageProperties;
  HttpRequestMessageProperty endpointLoadBalancer =
  prop[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;
  if (endpointLoadBalancer.Headers["X-Forwarded-For"] != null)
  {
    retIp = endpointLoadBalancer.Headers["X-Forwarded-For"];
  }
  if (string.IsNullOrEmpty(retIp))
  {
    RemoteEndpointMessageProperty endpoint =
                prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
                retIp = endpoint.Address;
  }
  return retIp;
}

但是,由于 WCF 服务托管在负载均衡器后面的 IIS 中,因此 我得到的IP地址始终是负载均衡器的IP。 有什么办法可以解决这个问题,以便我可以获得真实的IP 客户?


OperationContext context = OperationContext.Current;
MessageProperties properties = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string address = string.Empty;
//http://www.simosh.com/article/ddbggghj-get-client-ip-address-using-wcf-4-5-remoteendpointmessageproperty-in-load-balanc.html
if (properties.Keys.Contains(HttpRequestMessageProperty.Name))
{
    HttpRequestMessageProperty endpointLoadBalancer = properties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;
    if (endpointLoadBalancer != null && endpointLoadBalancer.Headers["X-Forwarded-For"] != null)
        address = endpointLoadBalancer.Headers["X-Forwarded-For"];
}
if (string.IsNullOrEmpty(address))
{
    address = endpoint.Address;
}

这在有负载均衡器的情况下有效,在没有负载均衡器的情况下也有效。我有一个端点作为 TCP,另一个端点作为 REST API 的 Web http。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在负载平衡情况下使用 WCF 4.5 RemoteEndpointMessageProperty 获取客户端 IP 地址 的相关文章

  • 如何通过ConfigurationManager找到配置文件位置?

    如何通过ConfigurationManager找到配置文件位置 我在代码中有 ConfigurationManager 类 并且正在调试它 我想知道它指向哪个配置文件 web config 或 app config 等 Configura
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • 使用 GCHandle 将大型结构数组从 C# unity 脚本传递到 C++ dll 在 C++ 函数执行后崩溃

    我想从 C unity 脚本将结构数组传递给 c 本机插件 我做了如下操作 我可以访问数据 但我的应用程序在执行 c 函数后崩溃 我不知道为什么 C side StructLayout LayoutKind Sequential publi
  • 如何在 ASP.NET Core 6.0 Web API 项目中启用 cors?

    在我的 ASP NET Core 6 0 Web API 项目中配置了 CORS 但预检请求收到 http 405 错误 换句话说 不允许使用 HTTP OPTION 看起来 cors 没有启用 我见过的例子config EnableCor
  • C语言中没有循环可以打印数组吗?

    例如 在Python中 如果我们将一个列表作为数组 它会直接用一行代码打印整个数组 有什么办法可以用C语言实现同样的事情吗 简短回答 No 对表格上几乎所有问题的简短回答 用 C 语言做 X 工作能像用 Python 一样简单吗 No 长答
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • 主构造函数不再在 VS2015 中编译

    直到今天 我可以使用主构造函数 例如 public class Test string text private string mText text 为了能够做到这一点 在以前的 Visual Studio CTP 中 我必须将其添加到 c
  • 原子的 C++ 内存屏障

    在这方面我是个新手 谁能提供以下内存屏障之间差异的简化解释 窗户MemoryBarrier 围栏 mm mfence 内联汇编asm volatile memory 内在的 ReadWriteBarrier 如果没有简单的解释 一些好文章或
  • C# 反序列化过程中创建指向父对象的指针

    我有这样的课程 Serializable public class child public Parent parent Serializable public class Parent public List
  • 删除数组时出现访问冲突异常

    删除分配的内存时 出现 访问冲突读取位置 异常 如下所示 我有一个针对 Visual Studio 2010 工具集 v100 C 编译器编译的本机 dll 我有一个针对它的托管 dll 包装器 它是针对工具集 v90 编译的 因为我想以
  • 如何使用“路径”查询 XDocument?

    我想查询一个XDocument给定路径的对象 例如 path to element I want 但我不知道如何继续 您可以使用以下方法System Xml XPath Extensions http msdn microsoft com
  • 检查另一种形式的线程是否仍在运行

    我有一个涉及两个窗体的 Windows 窗体应用程序 子表单用于将数据导出到 CSV 文件 并使用后台工作者写入文件 当这种情况发生时 我隐藏了表格 当后台工作程序运行时 父窗体仍然处于活动状态 因此即使后台工作程序正在写入文件 用户也可以
  • 使用方法的状态模式

    我正在尝试使用方法作为状态而不是类来基于状态模式的修改版本来实现一个简单的状态机 如下所示 private Action
  • C# 和断点 - 这里有魔术师吗?

    我有这个 public static void ByLinkText string text for var i 0 i lt 50 i try Setup Driver FindElement By LinkText text Click
  • 在两个点之间创建一条曲线,每个点都具有标准化向量

    因此 我需要一种写入方法来在两点之间创建一条曲线 每个点都有一个指向任意方向的归一化向量 我一直在尝试设计这样一种方法 但一直无法理解数学 在这里 由于一张图片胜过一千个文字 这就是我所需要的 在图中 矢量垂直于红线 我相信向量需要进行相同
  • 如何获取运行或段落的高度

    我找到了Run or Paragraph in FlowDocument现在我需要知道HEIGHT of it i e while navigator CompareTo flowDocViewer Document ContentEnd
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码

随机推荐

  • 闪亮的打印反应式 df 到控制台(瞥见(myreactive_df)用于调试目的?

    我正在尝试调试我的闪亮应用程序 并希望查看反应式数据框 例如一瞥 df 最初 我尝试创建一个断点 然后通过我的反应式 df 在 server r 中使用时查看环境是一个值而不是对象 我也尝试过browser 但不确定它会做什么 我对SO做了
  • Grails 2.3.x 支持 JDK 8

    看起来这个问题应该很简单 但是 Grails 的安装要求 http www grails org 安装 http www grails org Installation 已经两年没有更新了 有谁确定 Grails 2 3 会在 JDK 8
  • 将 Vue 部署到 GitHub Pages。 vue-router 错误

    我在使用 vue cli v3 0 部署 Vue 应用程序构建时遇到了一些问题 到 GitHub 页面 我在用着subtree https gist github com cobyism 4730490发送dist文件夹仅gh pages分
  • 为什么express.js在使用res.send()时返回空数组?

    我有一个包含键和值对数组的对象 console log myObject askdasuni com 11111 capsfrom2011 com 22222 defusionet com 33333 当我在应用程序中调用 res send
  • 如何在 React 中的不同文件之间共享变量数据

    我正在尝试在我的股票市场项目中设置图表 我正在尝试显示在 Gatsby 中点击的股票的图表 目前 我可以通过在代码中手动输入股票名称来显示任何股票的股票图表 我想用 api 调用的 url 内的 query 替换股票名称 因为const q
  • 如何使用 protoc 将协议缓冲区字符串编码为二进制

    我一直在尝试使用 protoc cli 实用程序对字符串进行编码 注意到输出仍然包含纯文本 我究竟做错了什么 osboxes osboxes proto bin cat teststring proto syntax proto2 mess
  • 暂停申请

    如何暂停我的应用程序或向我的应用程序发送暂停消息 我想模拟按下主页按钮 UIApplication 有一个私有实例方法 以下代码可以工作 在 iPhone 3GS 中测试 UIApplication app UIApplication sh
  • 如何让selenium等待ajax响应?

    我怎样才能让硒等待日历小部件之类的东西加载 现在我只是在做一个Thread sleep 2500 将测试用例导出到 junit 程序后 我会用 waitForElementPresent locator 这将等到该元素出现在 DOM 中 如
  • iOS 8 横向模式下按钮不显示

    我有一个按钮 我将其约束设置为 水平中心 和 垂直中心 在纵向模式下 它按预期出现在中心 但是当我将设备旋转到横向模式时 按钮消失 状态栏也不可见 Here is a screen which show constraint needed
  • 将数量输入字段更改为 WooCommerce 中的下拉菜单

    我在 function php 中使用以下内容 它在单个产品页面上效果很好 我遇到的问题是在购物车页面上 当您选择不同的数量时 它不会自动更新购物车 有任何想法吗 function woocommerce quantity input ar
  • PHP - 序列化具有静态属性的类

    当用户登录我的网站时 我会创建一个实例User类 获取一些与用户相关的数据并将对象存储在SESSION 我从数据库获取的一些数据应该在整个会话期间保持不变 并且我希望可以从其他对象访问这些数据 我更喜欢使用User static value
  • 如何在AppDomain中执行非托管程序集?

    执行非托管程序集时出现以下错误 无法加载文件或程序集 文件 C 程序 文件 Maxima 5 21 1 lib maxima 5 21 1 binary gcl maxima exe 或其依赖项之一 这 模块预计包含一个 装配清单 我应该怎
  • Tailwind CSS + VueJS 单文件组件与 VS Code 集成

    如何正确配置 Tailwind CSS 和 VS Code 以至少禁用 VueJS 单文件组件 vue cli 内有关 at rule 和空标记错误的错误
  • 用 C++ 编写操作系统[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Python/Pandas:如何从 datetime64[ns] 转换为 datetime

    我有一个处理 Excel 文件的脚本 发送它的部门有一个生成它的系统 我的脚本停止工作 我突然收到错误Can only use str accessor with string values which use np object dtyp
  • atexit() 函数

    有几个教程解释了如何使用atexit 函数如 http linux die net man 3 atexit http linux die net man 3 atexit 示例在 main 函数中给出 很容易理解 但是 我正在我的程序中创
  • 在 Windows 中使用 .Net 手动加载和卸载驱动程序

    我有一个通过 COM USB 转换器使用 USB 端口连接到计算机的设备 并且我使用 FTDI 驱动程序来模拟该 USB 上的虚拟 COM 端口 我的转换器有时会冻结 Windows 驱动程序也是如此 我无法打开 关闭 COM 软件无法通过
  • 获取单选按钮值 [INNO SETUP]

    我正在尝试在 Inno Setup 中创建一个新窗口 在此窗口中 应该有 5 个单选按钮 用户必须仅选择此选项之一 当用户单击下一个按钮时 我必须获取并保存单选按钮的值 在某处 并将该值传递给带有参数的批处理文件 将运行 我认为我应该在 N
  • ASP.NET 中的 Excel 读取:如果列具有不同的数据格式,则不会读取数据

    我有一个 asp net C 应用程序 我正在其中使用 OLEDBConnection 读取电子表格的内容 我正在使用下面的代码行从 Excel 电子表格中读取数据 OleDbConnection con new OleDbConnecti
  • 在负载平衡情况下使用 WCF 4.5 RemoteEndpointMessageProperty 获取客户端 IP 地址

    我在 IIS 中托管了 WCF 4 5 Restful 服务 我正在尝试使用 RemoteEndpointMessageProperty 获取客户端的 IP 地址 消耗该服务 Code 1 private string GetClientI