Forums Neueste Beiträge
 
Tags Keywords

WCF enum

09/03/2010 - 17:32 von Ronny | Report spam
Hallo,

ich versuche verzweifelt verschiedene Enums über eine WCF named Pipe zu
übertragen, bekomme aber immer eine Exception.

Kurz der Content. Die Klasse die ausgetauscht werden soll, sieht ca. so aus:

[DataContractAttribute]
class myClassType
{
[DataMember] public string name;
[DataMember] public myEnum1 enum1;
[DataMember] public myEnum2 enum2;
[DataMember] public myEnum3 enum3;

public myClassType(string name, myEnum1 e1, ...)
{ ... }
}

Die Enums sind wie folgt ca. definiert:

public enum myEnum1
{
one = 1,
two,
three
}
public enum myEnum2
{
foo = 1,
bar
}
public enum myEnum3
{
bla = 1,
blu,
blub,
ahoi
}


Wenn ich in der Klasse nur einen Enum als DataMember markiere, klappt alles
auch beim Client:
[DataMember] public myEnum1 enum1;
public myEnum2 enum2;
public myEnum3 enum3;

Wenn ich zwei Enums markiere, muss ich in den Enums selbst die
Initialisierung weglassen. Also "public enum myEnum1 { one, two, three }":
[DataMember] public myEnum1 enum1;
[DataMember] public myEnum2 enum2;
public myEnum3 enum3;

Sobald ich aber mehr Enums als DataMember markiere, bekomm ich immer
folgende Exception (diese tritt auch bei zwei markierten Enums auf, wenn sie
initialisiert sind):

Fehler beim Lesen aus der Pipe: Die Pipe wurde beendet. (109, 0x6d).

Server stack trace:
bei System.ServiceModel.Channels.StreamConnection.Read(Byte[] buffer,
Int32 offset, Int32 size, TimeSpan timeout)
bei System.ServiceModel.Channels.SessionConnectionReader.Receive(TimeSpan
timeout)
bei
System.ServiceModel.Channels.SynchronizedMessageSource.Receive(TimeSpan
timeout)
bei
System.ServiceModel.Channels.FramingDuplexSessionChannel.Receive(TimeSpan
timeout)
bei
System.ServiceModel.Channels.FramingDuplexSessionChannel.TryReceive(TimeSpan
timeout, Message& message)
bei System.ServiceModel.Dispatcher.DuplexChannelBinder.Request(Message
message, TimeSpan timeout)
bei System.ServiceModel.Channels.ServiceChannel.Call(String action,
Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs,
TimeSpan timeout)
bei
System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage
message)

Kann mir jemand einen Tipp geben was hier falsch làuft?

Vielen Dank,
Ronny
 

Lesen sie die antworten

#1 Frank Dzaebel
09/03/2010 - 22:06 | Warnen spam
Hallo Ronny,

WCF [...]
[DataMember] public myEnum1 enum1;



Entweder:
[EnumMember]
public MyEnum1 Enum1;

oder über die einzelnen Enum-Konstanten schreiben:

[Enumeration Types in Data Contracts]
http://msdn.microsoft.com/en-us/lib...47875.aspx

BTW: auch in die InnerException der Exception's schauen,
da verbirgt sich manchmal der Knackpunkt.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen