我尝试在 ASP.net core 管道中编写自定义中间件,作为我调用的一部分,想要附加/添加 cookie,以便管道中的下一个中间件可以访问这些 cookie。
设置 cookie 值时出现编译错误。任何人都可以推荐解决这个问题的方法吗?
注意:当我尝试使用 Response.Cookie 时,它可以工作,但唯一的问题是,cookie 仅反映来自浏览器的下一个请求,但我需要在执行此命令后立即反映管道中的下一个中间件。
下面的代码片段
public async Task Invoke(HttpContext httpContext)
{
var queryParameters = httpContext.Request.Query;
var cookies = httpContext.Request.Cookies;
if (!cookies.ContainsKey(".AspNetCore.Session")
|| cookies[".AspNetCore.Session"] != "new_key")
{
Run Code Online (Sandbox Code Playgroud)
httpContext.Request.Cookies[".AspNetCore.Session"] = "new_key";
}
await _next.Invoke(httpContext);
}
Run Code Online (Sandbox Code Playgroud) 我们有一个以 nettcp 模式托管的 WCF 服务和 WCF 客户端库,服务和客户端都是使用 .net 框架创建的。
现在我们正在使用 Asp.net core 2.1 创建新应用程序,但我们仍然需要使用相同的旧 WCF 客户端库来使用上面创建的 WCF 服务。
将此 WCFClient 库引用(.net 框架)添加到我们的 Asp.net 核心应用程序中。这里使用下面的代理构造函数来传递我的端点详细信息。
public LoggingServiceProxy(Binding binding, EndpointAddress remoteAddress)
: base(binding, remoteAddress)
new LoggingServiceProxy(new EndpointAddress("net.tcp://localhost:9100/LoggingService/Tcp"), new NetTcpBinding(SecurityMode.None));
Run Code Online (Sandbox Code Playgroud)
添加 System.ServiceModel.NetTcp 和 System.ServiceModel.Primitives NUGET 引用后,解决了所有其他错误。但是代码线程在执行代理代码时突然中止
((ICommunicationObject)this.channel).Open();
Run Code Online (Sandbox Code Playgroud)
此后没有更多信息,调试消息可用。没有引发异常。所以我们不知道它是什么?
注意:当我停止服务进行测试时,我清楚地收到异常“EndPointNotFound”。
预期的行为是能够使用 Asp.net Core 应用程序 -> WCF 客户端库(.net 框架) -> WCF 服务 nettcp(.net 框架)中的服务
在对自动生成的代理代码进行了更多研究后,发现此问题发生在 InnerChannel_Opened() 和 InnerChannel_Closed() 事件中。上面的事件得到了以下代码行“lock (this.channelLock)”,这导致了问题。没有提出异常。只是线程中止/退出。当注释掉这些事件时,它工作正常,但我不太确定注释这些自动生成的代码是否可以。
lock (this.channelLock)
{
if (this.IsDisposed)
{
throw new InvalidOperationException("Cannot use disposed object.");
}
if (this.Opened …Run Code Online (Sandbox Code Playgroud)