100分大赠送了

时间:2021-03-31 12:05:47
回答我个问题先,呵呵
为什么我的web service中类成员变量无法传递值?
我写了一个很简单的webservice,有两个函数,相当于一个get一个set,
就是先通过其中一个成员函数(set)把一个值传给WS,WS通过成员变量进行保存,再通过另一个成员函数把成员变量中的值返回给引用的客户端。
就这么简单的事情,可是传过去的值就是传不回来,
我新建的类库文件,在本地测试了一下这个类(sub main,console),一切正常,可以成功返回传过去的值,为什么在WS中就不行了?

15 个解决方案

#1


自己顶~
100分没人要吗?

#2


传过去的值就是传不回来
------------------------
?????
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

#5


不论提交什么值结果都是  ,your password is 
显然userName和userPassword都是空的,在readData中的赋值没有作用

#6


顶啊~

#7


朋友,能不能用C#代码写一次啊!
我想帮忙,可惜对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端的同一代理类发到服务器端请求,服务器会新实例化一个对象来执行,所以
传过去的值就是传不回来

#9


kc_u.readData(TextBox1.Text.ToString,TextBox2.Text.ToString)
Label1.Text = kc_u.getData()
-----------------------------------
两次了,readData()一次,getData()一次。asp.net是无状态的,每次请求都会生成一个新的处理请求对象

#10


zjsen(星愿)的说法完全正确,readData()和getData()分别想web service发出了两处请求。
用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

#12


接分!!

#13


单步调试一下就看出来了

#14


强,学习!

#15


明白了,受益非浅啊,结账研究先~

#1


自己顶~
100分没人要吗?

#2


传过去的值就是传不回来
------------------------
?????
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

#5


不论提交什么值结果都是  ,your password is 
显然userName和userPassword都是空的,在readData中的赋值没有作用

#6


顶啊~

#7


朋友,能不能用C#代码写一次啊!
我想帮忙,可惜对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端的同一代理类发到服务器端请求,服务器会新实例化一个对象来执行,所以
传过去的值就是传不回来

#9


kc_u.readData(TextBox1.Text.ToString,TextBox2.Text.ToString)
Label1.Text = kc_u.getData()
-----------------------------------
两次了,readData()一次,getData()一次。asp.net是无状态的,每次请求都会生成一个新的处理请求对象

#10


zjsen(星愿)的说法完全正确,readData()和getData()分别想web service发出了两处请求。
用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

#12


接分!!

#13


单步调试一下就看出来了

#14


强,学习!

#15


明白了,受益非浅啊,结账研究先~