R
Robert Scheer
Hi.
I wrote some classes to deal with custom sections on my .config file.
The classes work ok when called directly from my application, but when
I call these classes from a Web Service I keep receiving the error:
"You must implement a default accessor on
System.Configuration.ConfigurationLockCollection because it inherits
from ICollection."
But my class has a default acessor. My classes are as follow:
Public Class ClientsCollection
Inherits ConfigurationElementCollection
Protected Overloads Overrides Function CreateNewElement() As
ConfigurationElement
Return New ClientDefinition
End Function
Protected Overrides Function GetElementKey(ByVal element As
ConfigurationElement) As Object
Return DirectCast(element, ClientDefinition).Name
End Function
Public Shadows ReadOnly Property Count() As Integer
Get
Return MyBase.Count
End Get
End Property
Public Sub Add(ByVal value As ClientDefinition)
BaseAdd(value)
End Sub
Default Public Shadows ReadOnly Property Item(ByVal Name As
String) As ClientDefinition
Get
Return CType(BaseGet(Name), ClientDefinition)
End Get
End Property
Default Public Shadows Property Item(ByVal index As Integer) As
ClientDefinition
Get
Return CType(BaseGet(index), ClientDefinition)
End Get
Set(ByVal value As ClientDefinition)
If BaseGet(index) IsNot Nothing Then
BaseRemoveAt(index)
End If
BaseAdd(index, value)
End Set
End Property
End Class
Public Class ClientDefinition
Inherits ConfigurationElement
<ConfigurationProperty("name", IsRequired:=True)> _
Public Property Name() As String
Get
Return CType(Me("name"), String)
End Get
Set(ByVal value As String)
Me("name") = value
End Set
End Property
<ConfigurationProperty("connectionString", IsRequired:=True)> _
Public Property ConnectionString() As String
Get
Return CType(Me("connectionString"), String)
End Get
Set(ByVal value As String)
Me("connectionString") = value
End Set
End Property
End class
And the WebMethod as follows:
<WebMethod()> _
<XmlInclude(GetType(ClientsCollection))> _
<XmlInclude(GetType(ClientDefinition))> _
Public Function GetNativeConfiguration(ByVal key As String) As
ClientDefinition
Dim mgrClient As ClientsDefinitionManager = Nothing
Dim dcClient As ClientDefinition = Nothing
Try
mgrClient = New ClientsDefinitionManager(Server.MapPath
("~"), key)
dcClient = mgrClient.Find(key)
Return dcClient
Catch exError As Exception
Throw
End Try
End Function
Am I missing something?
Regards,
Robert Scheer
I wrote some classes to deal with custom sections on my .config file.
The classes work ok when called directly from my application, but when
I call these classes from a Web Service I keep receiving the error:
"You must implement a default accessor on
System.Configuration.ConfigurationLockCollection because it inherits
from ICollection."
But my class has a default acessor. My classes are as follow:
Public Class ClientsCollection
Inherits ConfigurationElementCollection
Protected Overloads Overrides Function CreateNewElement() As
ConfigurationElement
Return New ClientDefinition
End Function
Protected Overrides Function GetElementKey(ByVal element As
ConfigurationElement) As Object
Return DirectCast(element, ClientDefinition).Name
End Function
Public Shadows ReadOnly Property Count() As Integer
Get
Return MyBase.Count
End Get
End Property
Public Sub Add(ByVal value As ClientDefinition)
BaseAdd(value)
End Sub
Default Public Shadows ReadOnly Property Item(ByVal Name As
String) As ClientDefinition
Get
Return CType(BaseGet(Name), ClientDefinition)
End Get
End Property
Default Public Shadows Property Item(ByVal index As Integer) As
ClientDefinition
Get
Return CType(BaseGet(index), ClientDefinition)
End Get
Set(ByVal value As ClientDefinition)
If BaseGet(index) IsNot Nothing Then
BaseRemoveAt(index)
End If
BaseAdd(index, value)
End Set
End Property
End Class
Public Class ClientDefinition
Inherits ConfigurationElement
<ConfigurationProperty("name", IsRequired:=True)> _
Public Property Name() As String
Get
Return CType(Me("name"), String)
End Get
Set(ByVal value As String)
Me("name") = value
End Set
End Property
<ConfigurationProperty("connectionString", IsRequired:=True)> _
Public Property ConnectionString() As String
Get
Return CType(Me("connectionString"), String)
End Get
Set(ByVal value As String)
Me("connectionString") = value
End Set
End Property
End class
And the WebMethod as follows:
<WebMethod()> _
<XmlInclude(GetType(ClientsCollection))> _
<XmlInclude(GetType(ClientDefinition))> _
Public Function GetNativeConfiguration(ByVal key As String) As
ClientDefinition
Dim mgrClient As ClientsDefinitionManager = Nothing
Dim dcClient As ClientDefinition = Nothing
Try
mgrClient = New ClientsDefinitionManager(Server.MapPath
("~"), key)
dcClient = mgrClient.Find(key)
Return dcClient
Catch exError As Exception
Throw
End Try
End Function
Am I missing something?
Regards,
Robert Scheer