此代码段位于我的业务逻辑层类文件中:
Public Shared Function getAccIDFromSocialAuthSession() As Object
Dim db As SqlDatabase = Connection.connection
Dim accID As Integer
If SocialAuthUser.IsLoggedIn Then
Using cmd As SqlCommand = db.GetSqlStringCommand("SELECT AccountID FROM UserAccounts WHERE FBID=@fbID")
db.AddInParameter(cmd, "fbID", SqlDbType.VarChar, SocialAuthUser.GetCurrentUser.GetProfile.ID)
accID = db.ExecuteScalar(cmd)
End Using
End If
Return accID
End Function
我正在使用SocialAuth.Net。 SocialAuth.NET
将所有内容存储在会话中。例如,要获取Facebook用户ID,我们称之为SocialAuthUser.GetCurrentUser.GetProfile.ID
,因为它是基于会话的,当我尝试呼叫时,我收到此错误消息“对象引用未设置为对象的实例”来自webservice(asmx.vb)文件的SocialAuthUser.GetCurrentUser.GetProfile.ID
。我称之为(ClassName.FunctionName - > BLL.getAccIDFromSocialAuthSession)
当我从aspx.vb
页面调用相同的功能时,它可以正常工作但不是我从asmx.vb
页面调用它时。
由于我不知道会话变量名,我不能使用System.Web.HttpContext.Current.Session("NameHere")
任何解决方案??
答案 0 :(得分:2)
这是一些工作代码的开始:
Imports System.Web.Services
Imports System.ComponentModel
<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class LightboxService
Inherits WebService
<WebMethod(EnableSession:=True)> _
Public Function AddToLightbox(ByVal filename As String) As String
Dim user As String = CStr(Session("username"))
'...etc.
答案 1 :(得分:0)
听起来您需要在服务类上实现Implements IRequiresSessionState
。
如果没有这个,就不会有任何调用HttpContext.Current.Session("NameHere")
。
示例:(伪代码)
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)>
<System.Web.Script.Services.ScriptService()>
Public Class MyService
Inherits System.Web.Services.WebService
Implements IRequiresSessionState '' <-- This is the part you need
'' Code in here
End Class
<强>更新强>
我无法澄清,但它可能无法与您的网络服务一起使用。 Web服务是无状态的。这意味着它独立于您的实际网站运行。因此,只要SocialAuthUser
被实例化,网络服务器就不会有任何关于它的内容。它就是运行它自己的独立代码。
另一次更新
不要在这种情况下使用Web服务,请尝试在.aspx页面代码隐藏中使用web方法。
这样的事情:
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> <Services.WebMethod(EnableSession:=True)> _
Public Shared Function getAccIDFromSocialAuthSession() As Object
Dim db As SqlDatabase = Connection.connection
Dim accID As Integer
If SocialAuthUser.IsLoggedIn Then
Using cmd As SqlCommand = db.GetSqlStringCommand("SELECT AccountID FROM UserAccounts WHERE FBID=@fbID")
db.AddInParameter(cmd, "fbID", SqlDbType.VarChar, SocialAuthUser.GetCurrentUser.GetProfile.ID)
accID = db.ExecuteScalar(cmd)
End Using
End If
Return accID
End Function