Cast my custom class into System.String

  • Thread starter Thread starter John Smith
  • Start date Start date
J

John Smith

How can I allow someone to cast my C# class into System.String? Is it
possible in C#? In C++ I used "operator" keyword to mark C++ member
function.
 
Thank you very much for your response.

I'll ask you and others one more question which might be a little a bit off
the topic, but I have no other chice, since I have asked this on many
newsgroups and haven't received good answer. This is my case:

I'm writing webervice client using .Net 2.0. I have this class:

[System.Web.Services.WebServiceBindingAttribute(Name = "ValidateBinding",
Namespace = "http://example.org/Avtentikacija")]
public class MyWebService : SoapHttpClientProtocol
{
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use =
System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle =
System.Web.Services.Protocols.SoapParameterStyle.Bare)]
public XmlDocument validate(string url,
[System.Xml.Serialization.XmlElementAttribute(Namespace =
"http://www.example.org/PodpisaniDokument")] XmlDocument xmlDocument)
{
this.Url = url;
object[] results = null;
try
{
// ERROR occur at this line :(
results = this.Invoke("validate", new object[] { xmlDocument });
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return null;
}
return ((XmlDocument)(results[0]));
}
}

and I call it like this:

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.PreserveWhitespace = true;
xmlDocument.Load("C:\\request.xml");

MyWebService web = new MyWebService();
xmlDocument =
web.validate("http://localhost:8080/MyWeb/services/Avtentikacija",
xmlDocument);
if (xmlDocument != null)
xmlDocument.Save("C:\\response.xml");

And I got this error message:

System.InvalidOperationException: There was an error generating the XML
document. ---> System.InvalidCastException: Unable to cast object of type
'System.Xml.XmlDocument' to type 'System.String'.
at
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterMyWebService.Write1_validate(Object[]
p)
at
Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer.Serialize(Object
objectToSerialize, XmlSerializationWriter writer)
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,
Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String
id)
--- End of inner exception stack trace ---
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,
Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String
id)
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,
Object o, XmlSerializerNamespaces namespaces, String encodingStyle)
at
System.Web.Services.Protocols.SoapHttpClientProtocol.Serialize(SoapClientMessage
message)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String
methodName, Object[] parameters)
at MyWeb.MyWebService.validate(String url, XmlDocument xmlDocument) in
C:\Documents and Settings\I\My Documents\Visual Studio
2005\Projects\MyWeb\MyWeb\Form1.cs:line 152

Why? :(

Interesting is that the same code (Invloke() method) works fine for the auto
generated class from WSDL file by Visual Studio 2005. I've searched for
"string" operator, but there isn't any. I have also displayed ToString()
return value and it returns something like
"SomeNamespace.SomeAutoGeneratedClass". I was expection to see whole XML. I
don't know how .Net code casts those auto generated classes???

This is peace of auto generated class:

[System.Xml.Serialization.XmlRoot("PodpisaniDokument",
Namespace="http://www.example.org/PodpisaniDokument")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml",
"2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.example.org/PodpisaniDokument")]
public partial class PodpisaniDokumentTip {

}
 
John said:
Thank you very much for your response.

I'll ask you and others one more question which might be a little a bit off
the topic, but I have no other chice, since I have asked this on many
newsgroups and haven't received good answer. This is my case:

Generally creating a new topic for a new question is more advisable,
but anyway...
I'm writing webervice client using .Net 2.0. I have this class:
public class MyWebService : SoapHttpClientProtocol
{
public XmlDocument validate(string url,
[System.Xml.Serialization.XmlElementAttribute(Namespace =
"http://www.example.org/PodpisaniDokument")] XmlDocument xmlDocument)
{
this.Url = url;
object[] results = null;
try
{
// ERROR occur at this line :(
results = this.Invoke("validate", new object[] { xmlDocument });

Don't you mean

results = this.Invoke("validate", new object[] { url, xmlDocument } );

?
 
Thank you very much for your response. :> You were very close.
Don't you mean

results = this.Invoke("validate", new object[] { url, xmlDocument } );

Although VS2005 auto generated classes doesn't invoke web service with 2
arguments, I have tried your example. The only problem is that it adds
<url></url> tags in my <soap:body> request and I don't want this, because
server can't parse it. Is there any way to remoce <url></url> tags?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top