[Mono-dev] Fwd: Problem with WCF and IEnumerable as return type

Atsushi Eno atsushieno at veritas-vos-liberabit.com
Tue Dec 7 06:26:49 EST 2010


Please file a bug (C# is much better).

Atsushi Eno

(2010/12/07 16:14), Chakotey STME wrote:
> This problem still exists.
>
> Does anyone have an idea?
>
>
> ---------- Forwarded message ----------
> From: Chakotey STME<chakoteystme at gmail.com>
> Date: 2010/11/30
> Subject: Problem with WCF and IEnumerable as return type
> To: mono-devel-list at lists.ximian.com
>
>
> Hello,
>
> I have a problem with WCF.
>
> If I have this service contract:
>
> <ServiceContract()>  _
> Public Interface IHelloService
>     <OperationContract()>  _
>     Function Greet(ByVal name As String) As IEnumerable(Of Objekt)
> End Interface
>
> This Service:
> Imports System.ServiceModel
>
> Module Module1
>     Sub Main()
>         Dim host As ServiceHost = New ServiceHost(GetType(HelloService))
>         host.Open()
>     End Sub
> End Module
>
> The implementaion of HelloService of the Service:
> Imports Contracts
>
> Public Class HelloService
>     Implements IHelloService
>     Public Function Greet(ByVal name As String) As IEnumerable(Of
> Objekt) Implements IHelloService.Greet
>         Dim myObjekt As Objekt = New Objekt
>         Dim myObjekt2 As Objekt = New Objekt
>
>         myObjekt.text = "Hallo"
>         myObjekt.number = 3 + name.Length
>
>        Dim list As IList(Of Objekt) = New List(Of Objekt)
>
>         list.Add(myObjekt)
>         list.Add(myObjekt2)
>
>         Return list
>
>     End Function
>
> End Class
>
>
> And this client:
> Imports System.ServiceModel
> Imports Contracts
>
> Module Module1
>
>     Sub Main()
>         Dim binding = New BasicHttpBinding()
>         Dim address = New EndpointAddress("http://192.168.100.110:8080")
>         Dim client = New HelloClient(binding, address)
>         Dim myObjekt = client.Greet("name")
>
>         Console.ReadLine()
>     End Sub
> End Module
>
> The implementation of HelloService from the client:
>
> Imports System.ServiceModel
> Imports System.ServiceModel.Channels
> Imports System.Runtime.Serialization
> Imports Contracts
>
> Public Class HelloClient
>     Inherits ClientBase(Of IHelloService)
>     Implements IHelloService
>     Public Sub New(ByVal binding As Binding, ByVal address As EndpointAddress)
>         MyBase.New(binding, address)
>     End Sub
>
>     Public Function Greet(ByVal name As String) As IEnumerable(Of
> Objekt) Implements IHelloService.Greet
>         Return Channel.Greet(name)
>     End Function
> End Class
>
>
> I execute the service and execute the client.
> I get this Exception:
> Exception Non-empty prefix must be mapped to non-empty namespace URI.
>   at System.Xml.XmlTextWriter.WriteEndAttribute () [0x00000] in
> <filename unknown>:0
>   at System.Xml.XmlSimpleDictionaryWriter.WriteEndAttribute ()
> [0x00000] in<filename unknown>:0
>   at System.Xml.XmlWriter.WriteAttributeString (System.String prefix,
> System.String localName, System.String ns, System.String value)
> [0x00000] in<filename unknown>:0
>   at System.Xml.XmlDictionaryWriter.WriteXmlnsAttribute (System.String
> prefix, System.String namespaceUri) [0x00000] in<filename unknown>:0
>   at System.Runtime.Serialization.DataContractSerializer.WriteStartObject
> (System.Xml.XmlDictionaryWriter writer, System.Object graph) [0x00000]
> in<filename unknown>:0
>   at System.Runtime.Serialization.XmlObjectSerializer.WriteObject
> (System.Xml.XmlDictionaryWriter writer, System.Object graph) [0x00000]
> in<filename unknown>:0
>   at System.ServiceModel.Dispatcher.DataContractMessagesFormatter+DataContractBodyWriter.WriteMessagePart
> (System.Xml.XmlDictionaryWriter writer,
> System.ServiceModel.Description.MessageBodyDescription desc,
> System.ServiceModel.Description.MessagePartDescription partDesc,
> System.Object obj) [0x00000] in<filename unknown>:0
>   at System.ServiceModel.Dispatcher.DataContractMessagesFormatter+DataContractBodyWriter.OnWriteBodyContents
> (System.Xml.XmlDictionaryWriter writer) [0x00000] in<filename
> unknown>:0
>   at System.ServiceModel.Channels.BodyWriter.WriteBodyContents
> (System.Xml.XmlDictionaryWriter writer) [0x00000] in<filename
> unknown>:0
>   at System.ServiceModel.Channels.SimpleMessage.OnWriteBodyContents
> (System.Xml.XmlDictionaryWriter writer) [0x00000] in<filename
> unknown>:0
>   at System.ServiceModel.Channels.Message.WriteBodyContents
> (System.Xml.XmlDictionaryWriter writer) [0x00000] in<filename
> unknown>:0
>   at System.ServiceModel.Channels.Message.WriteBody
> (System.Xml.XmlDictionaryWriter writer) [0x00000] in<filename
> unknown>:0
>   at System.ServiceModel.Channels.Message.OnWriteMessage
> (System.Xml.XmlDictionaryWriter writer) [0x00000] in<filename
> unknown>:0
>   at System.ServiceModel.Channels.Message.WriteMessage
> (System.Xml.XmlDictionaryWriter writer) [0x00000] in<filename
> unknown>:0
>   at System.ServiceModel.Channels.TextMessageEncoder.WriteMessage
> (System.ServiceModel.Channels.Message message, System.IO.Stream
> stream) [0x00000] in<filename unknown>:0
>   at System.ServiceModel.Channels.HttpRequestContext.ProcessReply
> (System.ServiceModel.Channels.Message msg, TimeSpan timeout) [0x00000]
> in<filename unknown>:0
>   at System.ServiceModel.Channels.HttpRequestContextBase.Reply
> (System.ServiceModel.Channels.Message msg, TimeSpan timeout) [0x00000]
> in<filename unknown>:0
>   at System.ServiceModel.Dispatcher.MessageProcessingContext.Reply
> (Boolean useTimeout) [0x00000] in<filename unknown>:0
>   at System.ServiceModel.Dispatcher.OperationInvokerHandler.Reply
> (System.ServiceModel.Dispatcher.MessageProcessingContext mrc, Boolean
> useTimeout) [0x00000] in<filename unknown>:0
>   at System.ServiceModel.Dispatcher.OperationInvokerHandler.ProcessRequest
> (System.ServiceModel.Dispatcher.MessageProcessingContext mrc)
> [0x00000] in<filename unknown>:0
>   at System.ServiceModel.Dispatcher.BaseRequestProcessorHandler.ProcessRequestChain
> (System.ServiceModel.Dispatcher.MessageProcessingContext mrc)
> [0x00000] in<filename unknown>:0
>   at System.ServiceModel.Dispatcher.BaseRequestProcessorHandler.ProcessRequestChain
> (System.ServiceModel.Dispatcher.MessageProcessingContext mrc)
> [0x00000] in<filename unknown>:0
>   at System.ServiceModel.Dispatcher.BaseRequestProcessorHandler.ProcessRequestChain
> (System.ServiceModel.Dispatcher.MessageProcessingContext mrc)
> [0x00000] in<filename unknown>:0
>   at System.ServiceModel.Dispatcher.HandlersChain.ProcessRequestChain
> (System.ServiceModel.Dispatcher.MessageProcessingContext mrc)
> [0x00000] in<filename unknown>:0
>   at System.ServiceModel.Dispatcher.BaseRequestProcessor.ProcessRequest
> (System.ServiceModel.Dispatcher.MessageProcessingContext mrc)
> [0x00000] in<filename unknown>:0
>
>
>
> If I change the return type in the contracts, the client and the
> service, from IEnumerable(of objekt) to IList(Of objekt) it works!
>
> Why can't I use IEnumerable as return type?
>
> thanks
>
> chakoteystme
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
>
>



More information about the Mono-devel-list mailing list