MVC 5-会话ID随Cyber source回复mvc-action而变化。丢失会话对象

问题描述 投票:0回答:1

MVC 5应用程序,.Net框架4.5.2。使用Cyber​​Source提交付款。向Cyber​​Source提交付款发送参数时:“ override_custom_receipt_page”指定了Cyber​​source应该返回的MVC操作处理付款后。

在生产环境中,付款被发送到https://secureacceptance.cybersource.com。 。 。 。一切正常。

在本地,DEV,QA环境中,付款发送到https://testsecureacceptance.cybersource.com。 。 。 。在这些环境中,CS确实会返回到指定的MVC操作,但是SessionId不同,不是向CS发送请求的会话的SessionId。当然,mvc-action找不到处理CS答复所需的任何Session对象。并且回复处理不正确。

我用Google搜索,发现一些信息可以更改会话ID,尝试了一些建议,但无济于事。Global.asax.cs确实具有Session_Start:

protected void Session_Start()
    {
        Session["init"] = 0;
    }

也在web.config中;

<sessionState mode="InProc" customProvider="DefaultSessionProvider" timeout="20">    
      <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=<..value here..>" connectionStringName="DefaultConnection" />
      </providers>
    </sessionState>

DEV,QA,PROD环境在Azure中。

而且,到目前为止,代码可以正常工作5年,然后在Local,DEV和QA中中断。在将DEV和QA环境移至Azure之后,似乎已经崩溃了。但是,本地环境不在Azure中,而是我自己的笔记本电脑。没有本地,DEV和QA的负载平衡器。

[如果有人对可能发生的事情有任何了解,为什么CS无法返回同一会话,这将不胜感激。非常感谢

c# asp.net-mvc asp.net-mvc-5 cybersource
1个回答
0
投票

我们在使用其他付款网关时遇到了类似的问题。在我们的例子中,会话变量在DEV中有效,但在生产环境中无效。

主要是因为会话附加到线程上,并且当付款网关返回网站的回调URL时,它正在创建一个新线程并失去会话变量。

为了解决该问题,我们将参考号(在本例中为发票号)传递给了付款网关。付款成功后,网关会返回参考号以及其他详细信息。我们从参考编号中检索了客户详细信息,然后继续进行下一步。

© www.soinside.com 2019 - 2024. All rights reserved.