Web服务共享全局变量

时间:2012-10-06 21:30:27

标签: asp.net vb.net web-services

我是 ASP.net/VB.net 中创建网络服务的新手。我在 App_Code 文件夹中的 Service.vb 中设置了一个公共变量:

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Diagnostics
Imports System.Web.Script.Services

<System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Service
    Inherits System.Web.Services.WebService

    Public avIP As String = "0.0.0.0"
etc etc....

现在我已经制作了另一个 Class ,我希望得到 avIP 的值。但是,当我这样做时:

Client.Connect(Service.avIP, 60128)

它不会给我这个值只是一个错误。如果我做服务,我似乎没有任何价值。。建议清单中没有任何内容。

如何从 Service.vb 中获取值到我的其他课程中?

更新

我在 Service.vb 文件中有以下内容:

<System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Service
    Inherits System.Web.Services.WebService
    Public svc As Service = New Service
    Dim avIp As String = "0.0.0.0"

avReceiver.vb 中我有:

Client.Connect(svc.avIP, 60128)

1 个答案:

答案 0 :(得分:1)

要引用像您这样的类中声明的公共变量,您需要创建该类的实例 这意味着每个创建的类的实例都有它的变量副本 它是每种面向对象语言的一个非常基本的功能。

' Create a new instance of the Service class
Dim svc As Service = new Service()
' Set the value of a Public Property 
svc.avIP = "192.168.1.0"
' Use the instance value of that property
Client.Connect(svc.avIP, 60129)

' Create another instance of the Service class
Dim svc1 As Service = new Service()
' Set the value of a Public Property 
svc1.avIP = "192.168.1.1"
' Use the instance value of that property
Client.Connect(svc1.avIP, 60129)

如果要在不声明该类的实例的情况下使用类的属性成员,则需要将该成员声明为Shared(C#中的静态)。
这意味着该类的每个实例将共享相同的变量(当然还有它的值)。

Public Class Service   
     Inherits System.Web.Services.WebService   

     Public Shared avIP As String = "0.0.0.0"   
     ....
End Class

' Set the one and only avIP for every instance
Service.avIP = "192.168.1.0"
' Use directly the value
Client.Connect(Service.avIP, 60129)

' Create an instance of the Service class
Dim svc As Service = new Service()
' Pass the same value used directly with the class name (192.168.1.0)
Client.Connect(svc.avIP, 60129)