为什么我的web service中类成员变量无法传递值?
我写了一个很简单的webservice,有两个函数,相当于一个get一个set,
就是先通过其中一个成员函数(set)把一个值传给WS,WS通过成员变量进行保存,再通过另一个成员函数把成员变量中的值返回给引用的客户端。
就这么简单的事情,可是传过去的值就是传不回来,
我新建的类库文件,在本地测试了一下这个类(sub main,console),一切正常,可以成功返回传过去的值,为什么在WS中就不行了?
15 个解决方案
#1
自己顶~
100分没人要吗?
100分没人要吗?
#2
传过去的值就是传不回来
------------------------
?????
web service是建立在asp.net之上的,如果你想得到上一次请求所用到的数据的话,就应该在上次请求时把数据放在session里
------------------------
?????
web service是建立在asp.net之上的,如果你想得到上一次请求所用到的数据的话,就应该在上次请求时把数据放在session里
#3
是不是同一个对象调用的呀?不应该啊。你跟踪一下get函数返回时,get函数中有没有值。
#4
可是我是在一次请求内作的处理啊,
这是客户端:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim kc_u As KC.kc_WSUser = New KC.kc_WSUser
kc_u.readData(TextBox1.Text.ToString,TextBox2.Text.ToString)
Label1.Text = kc_u.getData()
End Sub
下面的是WebService:
Public Class kc_WSUser
Inherits System.Web.Services.WebService
Private userName, userPassword As String
<WebMethod()> _
Public Sub readData(ByVal uN As String, ByVal uP As String)
uName = uN
uPassword = uP
End Sub
<WebMethod()> _
Public Function getData() As String
Return uName & ",your password is " & uPassword
End Function
Public Property uName() As String
Get
uName = userName
End Get
Set(ByVal Value As String)
userName = Value
End Set
End Property
Public Property uPassword() As String
Get
uPassword = userPassword
End Get
Set(ByVal Value As String)
userPassword = Value
End Set
End Property
End Class
这是客户端:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim kc_u As KC.kc_WSUser = New KC.kc_WSUser
kc_u.readData(TextBox1.Text.ToString,TextBox2.Text.ToString)
Label1.Text = kc_u.getData()
End Sub
下面的是WebService:
Public Class kc_WSUser
Inherits System.Web.Services.WebService
Private userName, userPassword As String
<WebMethod()> _
Public Sub readData(ByVal uN As String, ByVal uP As String)
uName = uN
uPassword = uP
End Sub
<WebMethod()> _
Public Function getData() As String
Return uName & ",your password is " & uPassword
End Function
Public Property uName() As String
Get
uName = userName
End Get
Set(ByVal Value As String)
userName = Value
End Set
End Property
Public Property uPassword() As String
Get
uPassword = userPassword
End Get
Set(ByVal Value As String)
userPassword = Value
End Set
End Property
End Class
#5
不论提交什么值结果都是 ,your password is
显然userName和userPassword都是空的,在readData中的赋值没有作用
显然userName和userPassword都是空的,在readData中的赋值没有作用
#6
顶啊~
#7
朋友,能不能用C#代码写一次啊!
我想帮忙,可惜对vb.net代码很感冒啊!
我想帮忙,可惜对vb.net代码很感冒啊!
#8
给楼主说一下web service的调用:
Dim kc_u As KC.kc_WSUser = New KC.kc_WSUser
kc_u.readData(TextBox1.Text.ToString,TextBox2.Text.ToString)
client端实例化一个web service的代理类,进行这个web service的第一次方法调用,是由这个代理类先形成一个基于soap消息xml数据流的envelop,发到服务器断
而服务器端的iis一直处于监听状态,他接收到了client端的请求,解析envelop,看有没有client需要的web service,有了就实例化一个对象开始业务逻辑的执行了,然后就将返回结果xml流化成基于soap的envelop发回到client端,同时垃圾回收掉这个服务器端的实例,继续处于监听状态了
Label1.Text = kc_u.getData()
第二次client端的同一代理类发到服务器端请求,服务器会新实例化一个对象来执行,所以
传过去的值就是传不回来
Dim kc_u As KC.kc_WSUser = New KC.kc_WSUser
kc_u.readData(TextBox1.Text.ToString,TextBox2.Text.ToString)
client端实例化一个web service的代理类,进行这个web service的第一次方法调用,是由这个代理类先形成一个基于soap消息xml数据流的envelop,发到服务器断
而服务器端的iis一直处于监听状态,他接收到了client端的请求,解析envelop,看有没有client需要的web service,有了就实例化一个对象开始业务逻辑的执行了,然后就将返回结果xml流化成基于soap的envelop发回到client端,同时垃圾回收掉这个服务器端的实例,继续处于监听状态了
Label1.Text = kc_u.getData()
第二次client端的同一代理类发到服务器端请求,服务器会新实例化一个对象来执行,所以
传过去的值就是传不回来
#9
kc_u.readData(TextBox1.Text.ToString,TextBox2.Text.ToString)
Label1.Text = kc_u.getData()
-----------------------------------
两次了,readData()一次,getData()一次。asp.net是无状态的,每次请求都会生成一个新的处理请求对象
Label1.Text = kc_u.getData()
-----------------------------------
两次了,readData()一次,getData()一次。asp.net是无状态的,每次请求都会生成一个新的处理请求对象
#10
zjsen(星愿)的说法完全正确,readData()和getData()分别想web service发出了两处请求。
用session保存数据。
用session保存数据。
#11
出现错误的原因已经分析的差不多了
解决的办法:设置服务器端支持会话状态(你用vb呀,给你贴vb的拉)
<%@ WebService Language="VB" Class="Util" %>
Imports System.Web.Services
Public Class Util Inherits WebService
<WebMethod(EnableSession := True)>
Public Function readData(ByVal uN As String, ByVal uP As String)
uName = uN
uPassword = uP
If Session("username") Is Nothing Then
Session("username") = uName
End If
If Session("password") Is Nothing Then
Session("password") = uPassword
End If
End Function
<WebMethod(Description := "Per session Hit Counter",EnableSession := True)> Public Function getData() As String
uName = Session("username")
uPassword = Session("password")
Return uName & ",your password is " & uPassword
End Function
End Class
解决的办法:设置服务器端支持会话状态(你用vb呀,给你贴vb的拉)
<%@ WebService Language="VB" Class="Util" %>
Imports System.Web.Services
Public Class Util Inherits WebService
<WebMethod(EnableSession := True)>
Public Function readData(ByVal uN As String, ByVal uP As String)
uName = uN
uPassword = uP
If Session("username") Is Nothing Then
Session("username") = uName
End If
If Session("password") Is Nothing Then
Session("password") = uPassword
End If
End Function
<WebMethod(Description := "Per session Hit Counter",EnableSession := True)> Public Function getData() As String
uName = Session("username")
uPassword = Session("password")
Return uName & ",your password is " & uPassword
End Function
End Class
#12
接分!!
#13
单步调试一下就看出来了
#14
强,学习!
#15
明白了,受益非浅啊,结账研究先~
#1
自己顶~
100分没人要吗?
100分没人要吗?
#2
传过去的值就是传不回来
------------------------
?????
web service是建立在asp.net之上的,如果你想得到上一次请求所用到的数据的话,就应该在上次请求时把数据放在session里
------------------------
?????
web service是建立在asp.net之上的,如果你想得到上一次请求所用到的数据的话,就应该在上次请求时把数据放在session里
#3
是不是同一个对象调用的呀?不应该啊。你跟踪一下get函数返回时,get函数中有没有值。
#4
可是我是在一次请求内作的处理啊,
这是客户端:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim kc_u As KC.kc_WSUser = New KC.kc_WSUser
kc_u.readData(TextBox1.Text.ToString,TextBox2.Text.ToString)
Label1.Text = kc_u.getData()
End Sub
下面的是WebService:
Public Class kc_WSUser
Inherits System.Web.Services.WebService
Private userName, userPassword As String
<WebMethod()> _
Public Sub readData(ByVal uN As String, ByVal uP As String)
uName = uN
uPassword = uP
End Sub
<WebMethod()> _
Public Function getData() As String
Return uName & ",your password is " & uPassword
End Function
Public Property uName() As String
Get
uName = userName
End Get
Set(ByVal Value As String)
userName = Value
End Set
End Property
Public Property uPassword() As String
Get
uPassword = userPassword
End Get
Set(ByVal Value As String)
userPassword = Value
End Set
End Property
End Class
这是客户端:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim kc_u As KC.kc_WSUser = New KC.kc_WSUser
kc_u.readData(TextBox1.Text.ToString,TextBox2.Text.ToString)
Label1.Text = kc_u.getData()
End Sub
下面的是WebService:
Public Class kc_WSUser
Inherits System.Web.Services.WebService
Private userName, userPassword As String
<WebMethod()> _
Public Sub readData(ByVal uN As String, ByVal uP As String)
uName = uN
uPassword = uP
End Sub
<WebMethod()> _
Public Function getData() As String
Return uName & ",your password is " & uPassword
End Function
Public Property uName() As String
Get
uName = userName
End Get
Set(ByVal Value As String)
userName = Value
End Set
End Property
Public Property uPassword() As String
Get
uPassword = userPassword
End Get
Set(ByVal Value As String)
userPassword = Value
End Set
End Property
End Class
#5
不论提交什么值结果都是 ,your password is
显然userName和userPassword都是空的,在readData中的赋值没有作用
显然userName和userPassword都是空的,在readData中的赋值没有作用
#6
顶啊~
#7
朋友,能不能用C#代码写一次啊!
我想帮忙,可惜对vb.net代码很感冒啊!
我想帮忙,可惜对vb.net代码很感冒啊!
#8
给楼主说一下web service的调用:
Dim kc_u As KC.kc_WSUser = New KC.kc_WSUser
kc_u.readData(TextBox1.Text.ToString,TextBox2.Text.ToString)
client端实例化一个web service的代理类,进行这个web service的第一次方法调用,是由这个代理类先形成一个基于soap消息xml数据流的envelop,发到服务器断
而服务器端的iis一直处于监听状态,他接收到了client端的请求,解析envelop,看有没有client需要的web service,有了就实例化一个对象开始业务逻辑的执行了,然后就将返回结果xml流化成基于soap的envelop发回到client端,同时垃圾回收掉这个服务器端的实例,继续处于监听状态了
Label1.Text = kc_u.getData()
第二次client端的同一代理类发到服务器端请求,服务器会新实例化一个对象来执行,所以
传过去的值就是传不回来
Dim kc_u As KC.kc_WSUser = New KC.kc_WSUser
kc_u.readData(TextBox1.Text.ToString,TextBox2.Text.ToString)
client端实例化一个web service的代理类,进行这个web service的第一次方法调用,是由这个代理类先形成一个基于soap消息xml数据流的envelop,发到服务器断
而服务器端的iis一直处于监听状态,他接收到了client端的请求,解析envelop,看有没有client需要的web service,有了就实例化一个对象开始业务逻辑的执行了,然后就将返回结果xml流化成基于soap的envelop发回到client端,同时垃圾回收掉这个服务器端的实例,继续处于监听状态了
Label1.Text = kc_u.getData()
第二次client端的同一代理类发到服务器端请求,服务器会新实例化一个对象来执行,所以
传过去的值就是传不回来
#9
kc_u.readData(TextBox1.Text.ToString,TextBox2.Text.ToString)
Label1.Text = kc_u.getData()
-----------------------------------
两次了,readData()一次,getData()一次。asp.net是无状态的,每次请求都会生成一个新的处理请求对象
Label1.Text = kc_u.getData()
-----------------------------------
两次了,readData()一次,getData()一次。asp.net是无状态的,每次请求都会生成一个新的处理请求对象
#10
zjsen(星愿)的说法完全正确,readData()和getData()分别想web service发出了两处请求。
用session保存数据。
用session保存数据。
#11
出现错误的原因已经分析的差不多了
解决的办法:设置服务器端支持会话状态(你用vb呀,给你贴vb的拉)
<%@ WebService Language="VB" Class="Util" %>
Imports System.Web.Services
Public Class Util Inherits WebService
<WebMethod(EnableSession := True)>
Public Function readData(ByVal uN As String, ByVal uP As String)
uName = uN
uPassword = uP
If Session("username") Is Nothing Then
Session("username") = uName
End If
If Session("password") Is Nothing Then
Session("password") = uPassword
End If
End Function
<WebMethod(Description := "Per session Hit Counter",EnableSession := True)> Public Function getData() As String
uName = Session("username")
uPassword = Session("password")
Return uName & ",your password is " & uPassword
End Function
End Class
解决的办法:设置服务器端支持会话状态(你用vb呀,给你贴vb的拉)
<%@ WebService Language="VB" Class="Util" %>
Imports System.Web.Services
Public Class Util Inherits WebService
<WebMethod(EnableSession := True)>
Public Function readData(ByVal uN As String, ByVal uP As String)
uName = uN
uPassword = uP
If Session("username") Is Nothing Then
Session("username") = uName
End If
If Session("password") Is Nothing Then
Session("password") = uPassword
End If
End Function
<WebMethod(Description := "Per session Hit Counter",EnableSession := True)> Public Function getData() As String
uName = Session("username")
uPassword = Session("password")
Return uName & ",your password is " & uPassword
End Function
End Class
#12
接分!!
#13
单步调试一下就看出来了
#14
强,学习!
#15
明白了,受益非浅啊,结账研究先~