我需要创建一个托管在 IIS 中的 WCF 服务,使用 http 传输并在服务器内存中保持状态。虽然我知道有状态服务不是一个好主意,但最后一个约束对于使服务与旧客户端一起工作是必要的。
我的第一个想法是在 asp.net 的 session 中存储这些值。我在我的服务中激活了 asp.net 兼容模式,这使我可以访问 HttpContext,但放置在会话对象中的值没有保留在内存中。我认为这是因为处理会话状态的 http 模块未正确配置,但是当我在谷歌上搜索答案时,我遇到了 WCF 会话,并认为使用它们可能是一个更好的主意。
但是,WCF 会话似乎在记录下并在服务上放置了一组奇怪的先决条件,而且我无法找到适合我需要的配置:必须托管在 IIS 中,必须使用 http 或 https 传输,并且可以'不回复 Windows 身份验证,因为客户端和服务器不会属于同一域。我正在尝试使用 wsHttpBinding 来实现这一点,我听说 WCF 会话需要安全或可靠消息,但是: - 使用标准绑定并且当服务器不属于同一域时,它会失败并显示“SecurityNegotiationException The caller未通过服务验证”异常。这是相当合乎逻辑的,因为它使用的是 Windows 安全性。
如果我禁用安全完成,则会失败并显示“合同需要会话,但绑定 'WSHttpBinding' 不支持它或未正确配置以支持它。”</p>
如果在禁用安全性的同时启用可靠消息,则会收到异常“绑定验证失败,因为 WSHttpBinding 不支持基于传输安全 (HTTPS) 的可靠会话。无法打开通道工厂或服务主机。使用消息安全性通过 HTTP 进行安全可靠的消息传递。”</p>
我已经尝试启用传输级安全性,但这似乎对生成的错误没有任何影响
有没有适合我的配置?还是我应该回到使用 asp.net 会话的计划?