![]() | |
![]() |
| | Thread Tools | Search this Thread | Display Modes |
#1
| |||
| |||
|
#2
| ||||||
| ||||||
|
|
Hi, What am I doing wrong? Any help you can provide will be greatly appreciated! I have the following class defined in a shared object assembly. public class RMInfoMessageEventWrapper : MarshalByRefObject { private RMInfoMessageEventHandler callback; public RMInfoMessageEventWrapper(RMInfoMessageEventHandle r callback) { this.callback = callback; } public void Callback(object sender, RMInfoMessageEventArgs args) { this.callback(sender, args); } } I create an instance of RMInfoMessageEventWrapper on the client and pass it to a method in the remote object. I get this error: Serialization Exception: The object with ID 7 implements the IObjectReference interface for which all dependencies cannot be resolved. The most likely cause is two instances of IObjectReference that have a mutual dependency on each other. Server stack trace: at System.Runtime.Serialization.ObjectManager.GetComp letionInfo(FixupHolder fixup, ObjectHolder& holder, Object& member, Boolean bThrowIfMissing) at System.Runtime.Serialization.ObjectManager.Complet eObject(ObjectHolder holder, Boolean bObjectFullyComplete) at System.Runtime.Serialization.ObjectManager.DoFixup s() at System.Runtime.Serialization.Formatters.Binary.Obj ectReader.Deserialize(Head |
|
handler, __BinaryParser serParser, Boolean fCheck, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.Bin aryFormatter.Deserialize(S |
|
serializationStream, HeaderHandler handler, Boolean fCheck, IMethodCallMessage methodCallMessage) at System.Runtime.Remoting.Channels.CoreChannel.Deser ializeBinaryRequestMessage |
|
objectUri, Stream inputStream, Boolean bStrictBinding, TypeFilterLevel securityLevel) at System.Runtime.Remoting.Channels.BinaryServerForma tterSink.ProcessMessage(IS |
|
sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleRe turnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateI nvoke(MessageData& msgData, Int32 type) at Unisys.RulesModeler.OmniCorpTestBS.Client.I_OmniCo rpTestBS.Manager_may_provi |
|
input_List_Id_branch_office, RMInfoMessageEventWrapper eventWrapper) |
#3
| |||
| |||
|
|
Check to see all the classes marhalled have [Serializable()] attribute on top. My guess is somewhere down the hiararchy you have a non-serializable class. Ashish "Jon Z." <JonZ (AT) discussions (DOT) microsoft.com> wrote in message news:38252661-F94C-4769-B97F-255B35926150 (AT) microsoft (DOT) com... Hi, What am I doing wrong? Any help you can provide will be greatly appreciated! I have the following class defined in a shared object assembly. public class RMInfoMessageEventWrapper : MarshalByRefObject { private RMInfoMessageEventHandler callback; public RMInfoMessageEventWrapper(RMInfoMessageEventHandle r callback) { this.callback = callback; } public void Callback(object sender, RMInfoMessageEventArgs args) { this.callback(sender, args); } } I create an instance of RMInfoMessageEventWrapper on the client and pass it to a method in the remote object. I get this error: Serialization Exception: The object with ID 7 implements the IObjectReference interface for which all dependencies cannot be resolved. The most likely cause is two instances of IObjectReference that have a mutual dependency on each other. Server stack trace: at System.Runtime.Serialization.ObjectManager.GetComp letionInfo(FixupHolder fixup, ObjectHolder& holder, Object& member, Boolean bThrowIfMissing) at System.Runtime.Serialization.ObjectManager.Complet eObject(ObjectHolder holder, Boolean bObjectFullyComplete) at System.Runtime.Serialization.ObjectManager.DoFixup s() at System.Runtime.Serialization.Formatters.Binary.Obj ectReader.Deserialize(Head erHandler handler, __BinaryParser serParser, Boolean fCheck, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.Bin aryFormatter.Deserialize(S tream serializationStream, HeaderHandler handler, Boolean fCheck, IMethodCallMessage methodCallMessage) at System.Runtime.Remoting.Channels.CoreChannel.Deser ializeBinaryRequestMessage (String objectUri, Stream inputStream, Boolean bStrictBinding, TypeFilterLevel securityLevel) at System.Runtime.Remoting.Channels.BinaryServerForma tterSink.ProcessMessage(IS erverChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleRe turnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateI nvoke(MessageData& msgData, Int32 type) at Unisys.RulesModeler.OmniCorpTestBS.Client.I_OmniCo rpTestBS.Manager_may_provi de__A_new_branch_office_has_what_name___location(L ist_Id_branch_office input_List_Id_branch_office, RMInfoMessageEventWrapper eventWrapper) |
#4
| |||
| |||
|
|
Thanks for the reply Ashish, but all of the classes marshalled are serializable. Here are the classes: public delegate void RMInfoMessageEventHandler(object sender, RMInfoMessageEventArgs args); [Serializable()] public class RMError { private System.Byte severity; private int lineNumber; private string message; private int number; private string procedure; private string server; private string source; private System.Byte state; public RMError() { this.severity = 18; this.lineNumber = -1; this.message = "Unknown error"; this.number = -1; this.procedure = null; this.server = null; this.source = null; this.state = 0; } public RMError(System.Byte severity, int lineNumber, string message, int number, string procedure, string server, string source, System.Byte state) { this.severity = severity; this.lineNumber = lineNumber; if ((number == 50000)) { int index = 0; index = message.IndexOf(":"); this.message = message.Substring((index + 1)); this.number = Int32.Parse(message.Substring(0, index)); } else { this.message = message; this.number = number; } this.procedure = procedure; this.server = server; this.source = source; this.state = state; } public System.Byte Severity { get { return this.severity; } } public int LineNumber { get { return this.lineNumber; } } public string Message { get { return this.message; } } public int Number { get { return this.number; } } public string Procedure { get { return this.procedure; } } public string Server { get { return this.server; } } public string Source { get { return this.source; } } public System.Byte State { get { return this.state; } } public override string ToString() { StringBuilder error = new StringBuilder(); if ((this.severity <= 10)) { error.Append("Warning "); } else { error.Append("Error "); } error.Append(this.number); if ((this.lineNumber > 0)) { error.Append(" at line "); error.Append(this.lineNumber); error.Append(" in procedure \""); error.Append(this.procedure); error.Append("\""); } error.Append(": "); error.Append(this.message); return error.ToString(); } } [Serializable()] public class RMErrorCollection : CollectionBase, IList, ICollection, IEnumerable { public RMError this[int index] { get { return ((RMError)(this.List[index])); } set { this.List[index] = value; } } public int Add(RMError item) { return this.List.Add(item); } public void AddRange(RMErrorCollection list) { this.InnerList.AddRange(list); } public bool Contains(RMError item) { return this.List.Contains(item); } public int IndexOf(RMError item) { return this.List.IndexOf(item); } public void Insert(int index, RMError item) { this.List.Insert(index, item); } public void Remove(RMError item) { this.List.Remove(item); } protected override void OnValidate(object item) { if ((item == null)) { throw new ArgumentNullException("item"); } if ((item.GetType() != Type.GetType("XXX.Utilities.Impl.RMError"))) { throw new ArgumentException("Invalid argument type.", "item"); } } } [Serializable()] public class RMInfoMessageEventArgs : EventArgs { private RMErrorCollection errors; public RMInfoMessageEventArgs(RMErrorCollection errors) { this.errors = errors; } public RMErrorCollection Errors { get { return this.errors; } } } "Ashish Kaila" wrote: Check to see all the classes marhalled have [Serializable()] attribute on top. My guess is somewhere down the hiararchy you have a non-serializable class. Ashish "Jon Z." <JonZ (AT) discussions (DOT) microsoft.com> wrote in message news:38252661-F94C-4769-B97F-255B35926150 (AT) microsoft (DOT) com... Hi, What am I doing wrong? Any help you can provide will be greatly appreciated! I have the following class defined in a shared object assembly. public class RMInfoMessageEventWrapper : MarshalByRefObject { private RMInfoMessageEventHandler callback; public RMInfoMessageEventWrapper(RMInfoMessageEventHandle r callback) { this.callback = callback; } public void Callback(object sender, RMInfoMessageEventArgs args) { this.callback(sender, args); } } I create an instance of RMInfoMessageEventWrapper on the client and pass it to a method in the remote object. I get this error: Serialization Exception: The object with ID 7 implements the IObjectReference interface for which all dependencies cannot be resolved. The most likely cause is two instances of IObjectReference that have a mutual dependency on each other. Server stack trace: at System.Runtime.Serialization.ObjectManager.GetComp letionInfo(FixupHolder fixup, ObjectHolder& holder, Object& member, Boolean bThrowIfMissing) at System.Runtime.Serialization.ObjectManager.Complet eObject(ObjectHolder holder, Boolean bObjectFullyComplete) at System.Runtime.Serialization.ObjectManager.DoFixup s() at System.Runtime.Serialization.Formatters.Binary.Obj ectReader.Deserialize(Head erHandler handler, __BinaryParser serParser, Boolean fCheck, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.Bin aryFormatter.Deserialize(S tream serializationStream, HeaderHandler handler, Boolean fCheck, IMethodCallMessage methodCallMessage) at System.Runtime.Remoting.Channels.CoreChannel.Deser ializeBinaryRequestMessage (String objectUri, Stream inputStream, Boolean bStrictBinding, TypeFilterLevel securityLevel) at System.Runtime.Remoting.Channels.BinaryServerForma tterSink.ProcessMessage(IS erverChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleRe turnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateI nvoke(MessageData& msgData, Int32 type) at Unisys.RulesModeler.OmniCorpTestBS.Client.I_OmniCo rpTestBS.Manager_may_provi de__A_new_branch_office_has_what_name___location(L ist_Id_branch_office input_List_Id_branch_office, RMInfoMessageEventWrapper eventWrapper) |
#5
| |||
| |||
|
|
Your RMInfoMessageEventArgs contains RMErrorCollection and your RMErrorCollection class contains public void AddRange(RMErrorCollection list) { this.InnerList.AddRange(list); } So there is a circular reference when performing serialization ! Ashish "Jon Z." <JonZ (AT) discussions (DOT) microsoft.com> wrote in message news:94762122-7535-4BF7-B25E-7674667CB78D (AT) microsoft (DOT) com... Thanks for the reply Ashish, but all of the classes marshalled are serializable. Here are the classes: public delegate void RMInfoMessageEventHandler(object sender, RMInfoMessageEventArgs args); [Serializable()] public class RMError { private System.Byte severity; private int lineNumber; private string message; private int number; private string procedure; private string server; private string source; private System.Byte state; public RMError() { this.severity = 18; this.lineNumber = -1; this.message = "Unknown error"; this.number = -1; this.procedure = null; this.server = null; this.source = null; this.state = 0; } public RMError(System.Byte severity, int lineNumber, string message, int number, string procedure, string server, string source, System.Byte state) { this.severity = severity; this.lineNumber = lineNumber; if ((number == 50000)) { int index = 0; index = message.IndexOf(":"); this.message = message.Substring((index + 1)); this.number = Int32.Parse(message.Substring(0, index)); } else { this.message = message; this.number = number; } this.procedure = procedure; this.server = server; this.source = source; this.state = state; } public System.Byte Severity { get { return this.severity; } } public int LineNumber { get { return this.lineNumber; } } public string Message { get { return this.message; } } public int Number { get { return this.number; } } public string Procedure { get { return this.procedure; } } public string Server { get { return this.server; } } public string Source { get { return this.source; } } public System.Byte State { get { return this.state; } } public override string ToString() { StringBuilder error = new StringBuilder(); if ((this.severity <= 10)) { error.Append("Warning "); } else { error.Append("Error "); } error.Append(this.number); if ((this.lineNumber > 0)) { error.Append(" at line "); error.Append(this.lineNumber); error.Append(" in procedure \""); error.Append(this.procedure); error.Append("\""); } error.Append(": "); error.Append(this.message); return error.ToString(); } } [Serializable()] public class RMErrorCollection : CollectionBase, IList, ICollection, IEnumerable { public RMError this[int index] { get { return ((RMError)(this.List[index])); } set { this.List[index] = value; } } public int Add(RMError item) { return this.List.Add(item); } public void AddRange(RMErrorCollection list) { this.InnerList.AddRange(list); } public bool Contains(RMError item) { return this.List.Contains(item); } public int IndexOf(RMError item) { return this.List.IndexOf(item); } public void Insert(int index, RMError item) { this.List.Insert(index, item); } public void Remove(RMError item) { this.List.Remove(item); } protected override void OnValidate(object item) { if ((item == null)) { throw new ArgumentNullException("item"); } if ((item.GetType() != Type.GetType("XXX.Utilities.Impl.RMError"))) { throw new ArgumentException("Invalid argument type.", "item"); } } } [Serializable()] public class RMInfoMessageEventArgs : EventArgs { private RMErrorCollection errors; public RMInfoMessageEventArgs(RMErrorCollection errors) { this.errors = errors; } public RMErrorCollection Errors { get { return this.errors; } } } "Ashish Kaila" wrote: Check to see all the classes marhalled have [Serializable()] attribute on top. My guess is somewhere down the hiararchy you have a non-serializable class. Ashish "Jon Z." <JonZ (AT) discussions (DOT) microsoft.com> wrote in message news:38252661-F94C-4769-B97F-255B35926150 (AT) microsoft (DOT) com... Hi, What am I doing wrong? Any help you can provide will be greatly appreciated! I have the following class defined in a shared object assembly. public class RMInfoMessageEventWrapper : MarshalByRefObject { private RMInfoMessageEventHandler callback; public RMInfoMessageEventWrapper(RMInfoMessageEventHandle r callback) { this.callback = callback; } public void Callback(object sender, RMInfoMessageEventArgs args) { this.callback(sender, args); } } I create an instance of RMInfoMessageEventWrapper on the client and pass it to a method in the remote object. I get this error: Serialization Exception: The object with ID 7 implements the IObjectReference interface for which all dependencies cannot be resolved. The most likely cause is two instances of IObjectReference that have a mutual dependency on each other. Server stack trace: at System.Runtime.Serialization.ObjectManager.GetComp letionInfo(FixupHolder fixup, ObjectHolder& holder, Object& member, Boolean bThrowIfMissing) at System.Runtime.Serialization.ObjectManager.Complet eObject(ObjectHolder holder, Boolean bObjectFullyComplete) at System.Runtime.Serialization.ObjectManager.DoFixup s() at System.Runtime.Serialization.Formatters.Binary.Obj ectReader.Deserialize(Head erHandler handler, __BinaryParser serParser, Boolean fCheck, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.Bin aryFormatter.Deserialize(S tream serializationStream, HeaderHandler handler, Boolean fCheck, IMethodCallMessage methodCallMessage) at System.Runtime.Remoting.Channels.CoreChannel.Deser ializeBinaryRequestMessage (String objectUri, Stream inputStream, Boolean bStrictBinding, TypeFilterLevel securityLevel) at System.Runtime.Remoting.Channels.BinaryServerForma tterSink.ProcessMessage(IS erverChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleRe turnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateI nvoke(MessageData& msgData, Int32 type) at Unisys.RulesModeler.OmniCorpTestBS.Client.I_OmniCo rpTestBS.Manager_may_provi de__A_new_branch_office_has_what_name___location(L ist_Id_branch_office input_List_Id_branch_office, RMInfoMessageEventWrapper eventWrapper) |
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
| |