使用 wsHttpBinding 和 Message Security 与客户端凭据类型 windows 进行负载平衡 WCF

2024-01-14

我们有一个普通的 WCF 服务,它的绑定如下所示:

 <wsHttpBinding>
 <binding name="ServiceBinding" receiveTimeout="00:10:00" sendTimeout="00:10:00"
                bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                maxReceivedMessageSize="20971520"
                messageEncoding="Mtom" textEncoding="utf-8" useDefaultWebProxy="true"
                allowCookies="false">                   
                <security mode="Message">
                      <message clientCredentialType="Windows" negotiateServiceCredential="true"
                        establishSecurityContext="false" />
                </security>
            </binding>
</wsHttpBinding>

该服务位于负载均衡器后面的两台服务器中。正如这里所建议的

http://msdn.microsoft.com/en-us/library/vstudio/hh273122(v=vs.100).aspx http://msdn.microsoft.com/en-us/library/vstudio/hh273122(v=vs.100).aspx

我已将建立安全上下文设置为 false。当我运行调用服务时,我遇到与无效安全上下文令牌相关的间歇性问题。尽管我说不要建立SeurityContext,但似乎WCF 正在执行所有正常的握手操作。

此时,由于要求,使用 Cert、BasicHttBinding 或无安全性不是一个选项。

我什至让基础设施团队在负载均衡器中启用粘性会话,但似乎没有任何东西按照我们期望的方式工作。

我和我的团队几乎完成了互联网上所说的所有内容,但是当有负载均衡器时似乎没有任何效果,而当没有负载均衡器时此绑定工作完美。

有人对这种绑定感到幸运吗?

我们正在寻求微软向我们派遣 WCF 专家,但显然很难找到人。

我怎样才能让这个东西与负载均衡器很好地配合工作?


您设置negotiateServiceCredential=“true”。这意味着安全上下文是在初始交换期间创建的,但该上下文不会在后续调用中使用(因为 setSecurityContext="false")。协商过程允许客户端安全地获取服务器凭据。然后客户端使用这些凭据来保护消息。这就是所有“握手事件”发生的原因。

本文描述了这种情况:“Windows 客户端的消息安全性” http://msdn.microsoft.com/en-us/library/ms729709(v=vs.110).aspx.

当您使用负载均衡器时,需要进行安全协商(因为实际服务器的凭据取决于将服务请求的计算机),除非您对均衡器后面的所有服务实例使用相同的凭据。在后一种情况下,您可以设置 negotiateServiceCredential="false" 并在配置或代码中指定服务器凭据。例如,您可以使用 clientCredentialType="Certificate" 并为所有计算机使用相同的服务器证书。或者您可以 clientCredentialType="Windows" 并向域用户配置任意 SPN,该 SPN 用于运行平衡器后面的所有服务(我没有尝试这种情况,请参阅下面的详细信息)。

根据您的情况,协商服务凭证=“true”。所以可能的问题是:

1) 粘性会话可能无法正常工作。您可以通过使用返回的 BasicHttBinding 实现简单的 WCF 服务来测试它

String.Format("{0}{1}", prefix, DateTime.Now);

在平衡器后面的一台服务器上的应用程序设置中配置 prefix="" 和 prefix="!!!!!!!!!!!!"另外一个。然后循环调用该服务多次并记录结果。您将查看粘性会话是否存在问题。

2) 如果粘性会话正常工作,请确保您的配置在未使用平衡时适用于所有服务器。

当您无法使用粘性会话时,您应该设置negotiateServiceCredential=“false”。不使用协商,因此客户端应该在代码或配置中显式配置服务器凭据。要在不协商的情况下使用 Windows 凭据类型,服务的用户帐户必须有权访问在 Active Directory 域中注册的服务主体名称 (SPN)。请参阅详细信息和示例“无需凭据协商的 Windows 客户端的消息安全性” http://msdn.microsoft.com/en-us/library/ms735117(v=vs.110).aspx

要使用任意 SPN,您应该将服务配置为在同一 Windows 域帐户下运行。要为帐户设置任意 SPN,您可以在域控制器上使用 setspn 实用程序:

setspn a AcmeService/GlobalBank WS_Account

如中所述适用于 Windows 的 Kerberos 技术补充 http://msdn.microsoft.com/en-us/library/aa480609.aspx

另请参阅有关的文章消息安全 http://msdn.microsoft.com/en-us/library/ff647344.aspx用于描述各种场景和相应的设置。

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

使用 wsHttpBinding 和 Message Security 与客户端凭据类型 windows 进行负载平衡 WCF 的相关文章

  • C# 中两种不同类型的列表

    我目前在为客户提供购物车时遇到问题 他希望能够在 CartItems 之间添加文本 所以我想知道是否有某种方法仍然只有一个列表 我的解决方案是有两个列表 其中一个是 IList 类型 在计算购物车的重量和总体价格时会迭代 而另一个 ILis
  • TFS API - 缓慢的 foreach 变更集迭代

    问题背景 我正在使用 TFS api 查询 TFS 服务器上的大范围 1 600 文件 我从每个文件中收集其所有 ChangesetId 然后将其收集在列表中 代码 这是我正在使用的代码 它可以正确生成 QueryHistory 方法中指定
  • 了解 VerQueryValue

    在 MSDN 上 我注意到 VerQueryValue 函数的以下内容 lplp缓冲区 输出 低电压空洞当此方法返回时 包含指向 pBlock 指向的缓冲区中所请求版本信息的指针的地址 当关联的 pBlock 内存被释放时 lplpBuff
  • C++:Linux平台上的线程同步场景

    我正在为 Linux 平台实现多线程 C 程序 其中我需要类似于 WaitForMultipleObjects 的功能 在搜索解决方案时 我发现有一些文章描述了如何在 Linux 中实现 WaitForMultipleObjects 功能
  • C++11 中具有 C 链接的复杂类型

    我需要将 C 库的标头包含到我的 C 11 代码中 现在 标头提供了涉及大量的例程和数据结构double complex到处都是 例如 include
  • 枚举 EMF 时丢失文本

    我在列举发票 emf http www mediafire com kdjwvvo7odyvwa6并将其复制到另一个但文本丢失了 令人惊讶的是 当我将其输出到窗口时 它绘制得非常完美 int CALLBACK EnhMetaFileProc
  • 如何让BackgroundWorker返回一个对象

    我需要做RunWorkerAsync 返回一个List
  • .NET:EventHandler 竞争条件修复如何工作?

    以下模式用于在引发事件时避免竞争条件 以防另一个线程取消订阅 MyEvent 使其为空 class MyClass public event EventHandler MyEvent public void F EventHandler h
  • 从 C++ 中的函数返回二维数组[重复]

    这个问题在这里已经有答案了 可能的重复 C 从函数返回多维数组 https stackoverflow com questions 3716595 c returning multidimension array from function
  • 如何正确实现带有 close 方法的处置模式(CA1063)

    框架设计指南 第二版 第 327 页 说 考虑提供方法Close 除了Dispose 如果接近 是该领域的标准术语 这样做时 重要的是使 Close 实现与Dispose并考虑实施IDisposable Dispose方法明确 因此 按照提
  • 如何在方法模板中使用模板类型的引用传递参数?

    我目前正在努力编译以下代码 首先是包含带有方法模板的类的头文件 ConfigurationContext h class ConfigurationContext public template
  • 起订量工作单元

    我是单元测试的新手 我想为我的搜索功能创建一个测试 我的服务层看起来像 public class EmployeeService BaseService IEmployeeService public EmployeeService IUn
  • C++在子类中调用虚方法

    我有以下课程 class A protected A inner public virtual void doSomething 0 class B public A void doSomething if inner NULL inner
  • C# While 循环与 For 循环?

    在 C 中 一个问题已经困扰我一段时间了 它的 While 和 For 循环之间的实际主要区别是什么 它只是纯粹的可读性吗 在 for 循环中本质上可以做的所有事情都可以在 while 循环中完成 只是在不同的地方 举这些例子 int nu
  • 为什么这段代码不会产生编译错误?

    template
  • 在unity3D中显示数学方程

    我想使用它的 GUI 系统统一显示数学方程 有办法吗 我正在使用 C 语言在 Unity 中进行编程 如果我还可以使用 C 代码显示数学符号 这对我来说会很有用 谢谢 自 2016 年起 您可以使用TEXDraw https assetst
  • 随机排列

    我无法找到一种随机洗牌元素的好方法std vector经过一些操作后 恢复原来的顺序 我知道这应该是一个相当简单的算法 但我想我太累了 由于我被迫使用自定义随机数生成器类 我想我不能使用std random shuffle 无论如何这没有帮
  • 当一种语言是另一种语言的平行超集时,这意味着什么?

    我正在阅读关于实时并发 C 的期刊文章 http link springer com article 10 1007 2FBF00365999 并且它在摘要中提到 因此你们中的任何人都可以通过该链接查看上下文 Concurrent C 是
  • 如何查明我的字符串是否包含“micro”Unicode 字符?

    我有一个包含实验室数据的 Excel 电子表格 如下所示 g L ppb 我想测试希腊字母 是否存在 如果发现我需要做一些特别的事情 通常 我会写这样的东西 if cell StartsWith matchSequence lt unive
  • AllowUserToAddRows 不适用于 DataGridView 上的 List<> 数据源

    我有一个DataGridView与DataSource set to List

随机推荐

  • 将文件附加到存档而不读取/重写整个存档

    我有很多文件想要存储在一个存档文件中 我的第一个方法是将文件存储在压缩的 tarball 中 问题是 如果添加单个文件 我必须重写整个存档 我可以摆脱 gzip 压缩 但添加文件仍然很昂贵 您建议使用哪种其他存档格式来允许快速追加操作 Th
  • Laravel 迁移 - 创建时间戳时出现问题

    我正在尝试在我的 Laravel 实例上运行迁移 它们只是默认迁移 用户和密码重置 但是当它尝试创建时间戳时 它会抛出此错误 Illuminate Database QueryException SQLSTATE 42000 Syntax
  • 正则表达式中的可选字符

    任务非常简单 但我还没有想出一个好的解决方案 字符串可以包含数字 破折号和加号 或者仅包含数字 0 9 做了我需要的大部分工作 除了当用户输入像 这样的垃圾时 我在常规前瞻方面运气不佳 因为破折号和加号可能位于字符串中的任何位置 有效字符串
  • 来自 QDataStream 的 QT QString

    我正在使用缓冲区 并试图从中获取字符串 但不起作用 Example void myFunc QDataStream in quint8 v in gt gt v Ok I caught v value successfuly QString
  • 如何通过 grunt-contrib-uglify 按顺序缩小 js 文件?

    我有一个如下所示的目录 文件夹 b js 文件夹 jQuery js 文件夹 a js 文件夹 sub c js 我想将所有这些js文件缩小到一个js文件中in order jQuery js gt a js gt b js gt c js
  • VBA 多个循环匹配条件

    如果这是重复的 我深表歉意 因为我一直在搜索但没有找到答案 我对 VBA 以及它们如何构造循环很陌生 我正在尝试进行搜索和比较 我需要比较第一行中的值 看看它们是否与第二行匹配 如果不匹配 则继续移动到下一行 请参阅下面的我的代码 它运行时
  • 集群上运行的 Dask 程序出现文件未找到错误

    我有 4 台机器 M1 M2 M3 和 M4 调度程序 客户端 工作线程都在 M1 上运行 我已将 csv 文件放入 M1 中 其余的机器都是工人 当我在 dask 中使用 read csv 文件运行程序时 它给我错误 找不到文件 当您的一
  • 如何运行新的 gradle 任务?

    我在 build gradle 中创建了一个新的 gradle 任务 task callCL type Exec println hello commandLine rerun sh 假设运行 rerun sh bin bash cucum
  • 无法在 Windows 8 Metro 风格应用程序中使用 IPAddress 或类似类型

    我发现使用有困难System Net IPAddress或 Windows 8 Metro 应用程序中的任何类似类型 我正在创建一个将在 Intranet 环境中运行的应用程序 用户将使用 IPAddress 连接到远程服务器 但不知何故我
  • 如何调试复杂的 IF Excel 公式?

    我是一名学校老师 正在开发学校的评估系统 我应该怎么做才能纠正这个公式 IF H3 SUR IF Subject C3 lt 2 7 Not on track IF Subject C3 lt 3 29 On track IF Subjec
  • 卡夫卡消费者错误:标记协调员死亡

    我有一个在 Kafka 0 10 0 1 集群中有 10 个分区的主题 我有一个生成多个消费者线程的应用程序 对于这个主题 我生成了 5 个线程 我在我的应用程序日志中多次看到此条目 INFO AbstractCoordinator 600
  • Cython cimport 找不到 .pxd 模块

    已解决 请参阅编辑 3 假设包的结构如下 Some Package some package init py core init py definition pxd helper init py helper pxd helper pyx
  • 如何发送带有 header 参数的 HTTP 请求?

    一般来说 我对 javascript 和网络编程非常陌生 我需要一些帮助 我有一个 HTTP 请求 需要通过 javascript 发送 并需要将输出存储在变量中 我尝试仅使用呼叫网址 https api fantasydata net n
  • OpenXML SpreadsheetDocument SaveAs() 给出文件使用中错误

    我正在尝试使用从 ASP Net Core Web 应用程序调用的 OpenXMLPowerTools v4 5 3 2 DocumentFormat OpenXML v2 9 1 动态生成 Excel 电子表格 我已经验证能够正常生成电子
  • std::thread,在“this”上启动线程(从类本身内部)

    我正在尝试创建一个类 该类启动其成员方法之一的线程实例 当我在 main 中执行操作时 test myinstance std thread mythread myinstance 然后事情编译 但使用以下结构 include
  • 在 Android 上创建类似 iPhone 的徽章通知

    ALL 我到处都能看到有关如何使其适用于应用程序图标的回复 我的情况有点不同 在我的程序中 我有一个显示图像的 ListView 每个图像都与下面的对象相关联 我想做的是创建一个类似于 iPhone 徽章通知的设计 但适用于视图中的所有图像
  • Objective C 委托还是 C 风格的块回调?

    我正在设计一个类 每当有事情发生时就会 触发事件 这些事件往往与 UI 无关 我想知道这样做的最佳方法是什么 我一直在探索 代表们 我将定义一个委托类 在 init 函数中接受委托 并在事件发生时调用委托类上的方法 C型块 我将定义一个函数
  • 无法在 Mac OS Monterey 上找到代码签名机构

    我在这里更新我的问题 在顶部 所以任何阅读的人都会首先遇到最新的未解决的问题 为了回应亚历克斯 纳维的建议 我匆忙地更新了我的问题 的结果 bash3 2 Users jnorris codesign dv verbose 4 opt ho
  • 如何在log4j2.02中以编程方式配置Logger?

    我想使用 log4jwithout任何配置文件 我想做的是 logger Logger LogManager getLogger this getClass String pattern level m n do something to
  • 使用 wsHttpBinding 和 Message Security 与客户端凭据类型 windows 进行负载平衡 WCF

    我们有一个普通的 WCF 服务 它的绑定如下所示