【发布时间】:2020-07-27 15:44:16
【问题描述】:
我在我的 ASP.NET Web 应用程序旁边托管了一个 ASMX Web 服务。现在,我需要让用户会话进入 Web 服务。为了测试这一点,我做了这个简单的方法:
[WebMethod(EnableSession = true)]
public string checkSession()
{
return HttpContext.Current.Session["userid"].ToString();
}
所以,首先我登录到我的网络应用程序,然后在浏览器中转到我的网络服务并单击自动生成的测试页面上的“checkSession”。我已经在 3 台计算机上对此进行了测试。所有 3 个都可以在 webapp 上正常工作(因此正在创建会话等),其中 2 个在调用 webmethod 时返回 Session["userid"] 的值,但是最后一台计算机返回“对象引用未设置为对象的实例”,因为 Session 为空。
那么,这些计算机之间有什么区别?为什么我的 ASP.NET 应用程序可以在所有计算机上获取会话,但 web 服务不能?
【问题讨论】:
-
你是如何存储你的会话的?如果在进程内,您需要 asmx webservice 在与 webapp 相同的 appPool 上运行。您是否一直收到那台机器的会话错误?
-
我其实不知道。我所做的就是当他们最初在 ASP.NET 端登录时,我设置: Session["userid"] = theiridfromdb;首先,我如何检查它是否在进程中,然后我将如何在同一个 appPool 中运行 web 服务?是的,那台电脑总是报错。
-
看起来 inproc 是默认值,所以是的,我正在使用它。我在运行 IIS6 的专用服务器上运行它,ASP.NET 站点和 web 服务是一个应用程序。同样,它们是 IIS 中的同一个应用程序,Visual Studio 将它们的后端编译为同一个 DLL。
-
查看这篇文章:启用会话的网络服务 - devhood.com/messages/message_view-2.aspx?thread_id=50261
-
在不同的注释 - 你不应该在一个可能为 null 的对象上调用 ToString() - 应该首先检查 null。
标签: c# asp.net web-services session-state