0

我的 WCF 服务包含一个类,如:

<DataContract()>
Public Class MyClass
    <DataMember()>
    Public Property MyProperty As Integer
    <DataMember()>
    Public Property MyOtherProperty As Integer
    Private Property mTotal As Integer
    <DataMember()>
    Public ReadOnly Property Total As Integer
        Get
            Return mTotal
        End Get
    End Property
    Public Sub New(prop1 As Integer, prop2 As Integer)
        mTotal = prop1 + prop2
    End Sub
End Class

当我尝试访问该服务时,我可以创建一个新的“MyClass”对象,但“New”子对象没有公开,因此我无法提供参数,并且永远不会填充 mTotal。这是一个限制还是我错过了什么?

4

3 回答 3

2

您的参数化构造函数仅在服务器端可用,您不能从客户端调用它。您可以向 ServiceContract 添加一个调用该构造函数然后返回结果的函数。自从我使用 VB 以来已经有好几年了,如果语法不太正确,请原谅我,但这应该给你正确的想法:

<OperationContract()>
Function CreateNewMyClass(prop1 As Integer, prop2 As Integer) as MyClass

实现看起来像这样:

Function CreateNewMyClass(prop1 As Integer, prop2 As Integer) as MyClass
    Return New MyClass(prop1, prop2) 
End Function
于 2013-10-30T19:13:10.237 回答
1

SOAP Web 服务不公开任何特定于 OO 或 .NET 的内容。您不能公开您的构造函数、索引器、事件或类似的东西。

即使您“公开” an enum,您并没有真正公开 an enum: 只是一种可以具有几个枚举字符串值之一的字符串类型。没有对应的整数。

您也不能公开重载方法,也不能公开泛型。

于 2013-10-30T19:21:07.940 回答
0

通过添加另一个无参数构造函数来更新您的类:

<DataContract()>
Public Class MyClass
    <DataMember()>
    Public Property MyProperty As Integer
    <DataMember()>
    Public Property MyOtherProperty As Integer
    Private Property mTotal As Integer
    <DataMember()>
    Public ReadOnly Property Total As Integer
        Get
            Return mTotal
        End Get
    End Property
    Public Sub New(prop1 As Integer, prop2 As Integer)
        mTotal = prop1 + prop2
    End Sub

   Public Sub New()
     ' default constructor
   End Sub
End Class

如果您没有显式定义一个默认(无参数)构造函数,VB 将为您提供一个默认(无参数)构造函数,但由于您创建了一个接受prop1andprop2的构造函数,因此除非您定义一个,否则无参数构造函数就消失了。

于 2013-10-30T18:58:58.263 回答