Help!
Below is some code for a Web Service which has two methods, First() and
Second(). However, when the code is run, whichever of the two methods
appears second in the source fails with "System.InvalidCastException:
Specified cast is not valid" in
Microsoft.Xml.Serialization.GeneratedAssembly.XmlS erializationWriter1.Write5
_ArrayOfAnyType(Object o) of the temporary C# DLL that Web Service
processing creates when serializing data.
My theory is that because both methods are serialized as ArrayOfAnyType,
there is only one WriteN_ArrayOfAnyType method created in the temporary C#
DLL, which treats all objects therein as the type of objects in the first
method in the Web Service, hence the invalid cast when attempting to
serialize the data from the second.
Can anyone tell me what directives I can put where, to communicate to the
Soap/XML system that the two methods, "First()" and "Second()", in the code
below return different types of data, which will, I hope, prevent this
invalid cast exception.
Many thanks
Eric
------------------------------- the code in
question -------------------------------
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Schema;
using System.Web.Services;
namespace NewServe {
// ------------------------------------------------------------------
public class FirstClass {
public string one = "";
public string two = "";
public FirstClass() {
one = "";
two = "";
}
public FirstClass(string one, string two) {
this.one = one;
this.two = two;
}
}
// ------------------------------------------------------------------
public class SecondClass {
public string proto = "";
public string steno = "";
public string trito = "";
public SecondClass() {
proto = "";
steno = "";
trito = "";
}
public SecondClass(string one, string two, string three) {
this.proto = one;
this.steno = two;
this.trito = three;
}
}
// ------------------------------------------------------------------
public class Seconds : IEnumerable, IEnumerator {
private ArrayList contents = new ArrayList();
private int position = -1;
public Seconds() {
if (this.contents == null) {
this.contents = new ArrayList();
}
} // public secondss.
public void Add ( object o) {
this.contents.Add(o);
}
public SecondClass this[int index] {
get {
return (SecondClass) this.contents[index];
}
}
#region IEnumerable Members
public IEnumerator GetEnumerator() {
this.Reset();
return (IEnumerator) this;
}
#endregion
#region IEnumerator Members
public void Reset() {
this.position = -1;
}
public object Current {
get {
return this.contents[this.position];
}
}
public bool MoveNext() {
if (this.position < (this.contents.Count - 1)) {
this.position++;
return true;
} else {
return false;
}
}
#endregion
}
// ------------------------------------------------------------------
public class Service1 : System.Web.Services.WebService {
// ----------------------------------------------------------
public Service1() {
InitializeComponent();
} // public Service1
#region Component Designer generated code
private IContainer components = null;
private void InitializeComponent()
{
}
// ----------------------------------------------------------
protected override void Dispose( bool disposing ) {
if(disposing && components != null) {
components.Dispose();
} // if (disposing...
base.Dispose(disposing);
} // protected override void Dispose...
#endregion
// ----------------------------------------------------------
[WebMethod ]
[XmlInclude(typeof(SecondClass))]
[XmlInclude(typeof(Seconds))]
public Seconds Second() {
Seconds rv = new Seconds();
rv.Add(new SecondClass("one", "two", "three"));
rv.Add(new SecondClass("one", "two", "three"));
return rv;
} // public Seconds Second...
// ----------------------------------------------------------
[WebMethod]
[XmlInclude(typeof(FirstClass))]
public ArrayList First() {
ArrayList rv = new ArrayList();
rv.Add(new FirstClass("One", "two"));
rv.Add(new FirstClass("three", "four"));
return rv;
} // public ArrayList First()...
} // class Service1...
} // namespace NewServe... 1 4304
I may have developed a work-around for this problem (I haven't given it a
comprehensive beating yet).
I have contrived to invent two new classes, FirstHolder and SecondHolder.
Inside FirstHolder is an ArrayList of FirstClass objects. Inside
SecondHolder is a Seconds collection of SecondClass objects. The Web
methods now return return the holding objects, not the ArrayList or Seconds
collection directly. Now, the HTTP test page seems to work for both
methods, regardless of order.
Am I sacreficing the high moral ground with this circumvention?
"Eric Porter" <bo********@hotmail.com> wrote in message
news:cc*******************@news.demon.co.uk... Help!
Below is some code for a Web Service which has two methods, First() and Second(). However, when the code is run, whichever of the two methods appears second in the source fails with "System.InvalidCastException: Specified cast is not valid" in
Microsoft.Xml.Serialization.GeneratedAssembly.XmlS erializationWriter1.Write5 _ArrayOfAnyType(Object o) of the temporary C# DLL that Web Service processing creates when serializing data.
My theory is that because both methods are serialized as ArrayOfAnyType, there is only one WriteN_ArrayOfAnyType method created in the temporary C# DLL, which treats all objects therein as the type of objects in the first method in the Web Service, hence the invalid cast when attempting to serialize the data from the second.
Can anyone tell me what directives I can put where, to communicate to the Soap/XML system that the two methods, "First()" and "Second()", in the
code below return different types of data, which will, I hope, prevent this invalid cast exception.
Many thanks Eric ------------------------------- the code in question ------------------------------- using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Xml; using System.Xml.Serialization; using System.Xml.Schema; using System.Web.Services;
namespace NewServe {
// ------------------------------------------------------------------ public class FirstClass {
public string one = ""; public string two = "";
public FirstClass() { one = ""; two = ""; }
public FirstClass(string one, string two) {
this.one = one; this.two = two; } }
// ------------------------------------------------------------------ public class SecondClass {
public string proto = ""; public string steno = ""; public string trito = "";
public SecondClass() { proto = ""; steno = ""; trito = ""; }
public SecondClass(string one, string two, string three) {
this.proto = one; this.steno = two; this.trito = three; } } // ------------------------------------------------------------------ public class Seconds : IEnumerable, IEnumerator {
private ArrayList contents = new ArrayList(); private int position = -1;
public Seconds() { if (this.contents == null) { this.contents = new ArrayList(); } } // public secondss.
public void Add ( object o) { this.contents.Add(o); }
public SecondClass this[int index] { get { return (SecondClass) this.contents[index]; } } #region IEnumerable Members public IEnumerator GetEnumerator() { this.Reset(); return (IEnumerator) this; } #endregion #region IEnumerator Members public void Reset() { this.position = -1; } public object Current { get { return this.contents[this.position]; } } public bool MoveNext() { if (this.position < (this.contents.Count - 1)) { this.position++; return true; } else { return false; } } #endregion }
// ------------------------------------------------------------------ public class Service1 : System.Web.Services.WebService {
// ---------------------------------------------------------- public Service1() { InitializeComponent(); } // public Service1 #region Component Designer generated code private IContainer components = null; private void InitializeComponent() { } // ---------------------------------------------------------- protected override void Dispose( bool disposing ) { if(disposing && components != null) { components.Dispose(); } // if (disposing... base.Dispose(disposing); } // protected override void Dispose... #endregion
// ---------------------------------------------------------- [WebMethod ] [XmlInclude(typeof(SecondClass))] [XmlInclude(typeof(Seconds))] public Seconds Second() {
Seconds rv = new Seconds(); rv.Add(new SecondClass("one", "two", "three")); rv.Add(new SecondClass("one", "two", "three")); return rv;
} // public Seconds Second...
// ---------------------------------------------------------- [WebMethod] [XmlInclude(typeof(FirstClass))] public ArrayList First() {
ArrayList rv = new ArrayList(); rv.Add(new FirstClass("One", "two")); rv.Add(new FirstClass("three", "four")); return rv;
} // public ArrayList First()...
} // class Service1...
} // namespace NewServe...
This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Ben |
last post by:
Hi, there.
Recently I was working on a problem where we want to save generic
closures in a data structure (a vector). The closure should work for...
|
by: andrewcw |
last post by:
There is an error in XML document (1, 2).
I used XML spy to create the XML and XSD. When I asked to
have the XML validated it said it was OK.
I...
|
by: Aaron Clamage |
last post by:
Hi,
I'm not sure that if this is the right forum, but any help would be greatly
appreciated.
I am porting some java serialization code to c#...
|
by: Noël Danjou |
last post by:
VS.NET 2003, C# and .NET Framework 1.1.
Hello,
I am trying to serialize a small sample class using the XmlSerializer class.
** Here is the...
|
by: Uttam |
last post by:
Hello,
We are at a very crucial decision making stage to select between .Net
and Java. Our requirement is to download a class at runtime on the...
|
by: Michael Adams |
last post by:
I don't know if you have noticed, but it seems like Microsoft is losing
interest in C#, and putting their energy into Visual Basic.NET instead.
...
|
by: Clemens Vasters |
last post by:
"Is anybody from Microsoft reading this?"
Well ... actually .... no .... welll ... maybe if you're really lucky. Let
me explain ...
My name is...
|
by: kikisan |
last post by:
I am developing a windows service which utilizes the following classes:
interface IPersistable;
abstract class PersistableObject :...
|
by: mkvenkit.vc |
last post by:
Hello,
I hope this is the right place to post a question on Boost. If not,
please let me know where I can post this message and I will do so.
...
|
by: tammygombez |
last post by:
Hey everyone!
I've been researching gaming laptops lately, and I must say, they can get pretty expensive. However, I've come across some great...
|
by: concettolabs |
last post by:
In today's business world, businesses are increasingly turning to PowerApps to develop custom business applications. PowerApps is a powerful tool...
|
by: better678 |
last post by:
Question:
Discuss your understanding of the Java platform. Is the statement "Java is interpreted" correct?
Answer:
Java is an object-oriented...
|
by: Kemmylinns12 |
last post by:
Blockchain technology has emerged as a transformative force in the business world, offering unprecedented opportunities for innovation and...
|
by: CD Tom |
last post by:
This happens in runtime 2013 and 2016. When a report is run and then closed a toolbar shows up and the only way to get it to go away is to right...
|
by: Naresh1 |
last post by:
What is WebLogic Admin Training?
WebLogic Admin Training is a specialized program designed to equip individuals with the skills and knowledge...
|
by: jalbright99669 |
last post by:
Am having a bit of a time with URL Rewrite. I need to incorporate http to https redirect with a reverse proxy. I have the URL Rewrite rules made...
|
by: antdb |
last post by:
Ⅰ. Advantage of AntDB: hyper-convergence + streaming processing engine
In the overall architecture, a new "hyper-convergence" concept was...
|
by: Matthew3360 |
last post by:
Hi, I have a python app that i want to be able to get variables from a php page on my webserver. My python app is on my computer. How would I make it...
| |