views:

1133

answers:

2

When I throw an exception in my C# WebService (SoapException with the real exception as inner exception) the client recieves an exception with the following message. Can I supress all the HTML stuff and just send the exception with the message I want.

This is not the full message, only the part that I wan't to get rid of.

The request failed with the error message:
--
<html>
    <head>
        <title>Runtime Error</title>
        <style>
         body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;} 
         p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
         b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
         H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
         H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
         pre {font-family:"Lucida Console";font-size: .9em}
         .marker {font-weight: bold; color: black;text-decoration: none;}
         .version {color: gray;}
         .error {margin-bottom: 10px;}
         .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
        </style>
    </head>

    <body bgcolor="white">

            <span><H1>Server Error in '/MyWeb.Service' Application.<hr width=100% size=1 color=silver></H1>

            <h2> <i>Runtime Error</i> </h2></span>

            <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

            <b> Description: </b>An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed.
            <br><br>

            <b>Details:</b> To enable the details of this specific error message to be viewable on the local server machine, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "RemoteOnly". To enable the details to be viewable on remote machines, please set "mode" to "Off".<br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code><pre>

<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="RemoteOnly"/>
    </system.web>
</configuration></pre></code>

                  </td>
               </tr>
            </table>

            <br>

            <b>Notes:</b> The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to a custom error page URL.<br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code><pre>

<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="On" defaultRedirect="mycustompage.htm"/>
    </system.web>
</configuration></pre></code>

                  </td>
               </tr>
            </table>

            <br>

    </body>
</html>
A: 

It depends, if you're using WCF you can define a custom exception. All exceptions that you want your client to see must be of the type FaultException.

Your custom exception would look like this:

    [DataContract]
    public class CustomFault
    {
       public CustomFault()
       {
       }

        public CustomFault(string message)
        {
            Message = message;
        }

        [DataMember]
        public string Message { get; private set; }
    }

and you throw your custom exception like this:

throw new FaultException<CustomFault>(new CustomFault("your custom message"));
Blake Pettersson
No, I'm not using WCF.
crauscher
A: 

I don't think you're getting the error you're thinking. It looks like your client isn't able to hit your service and getting a web page error, taking that html and wrapping it in a soap exception. Since your web service isn't accessable, there's nothing you can do in code to handle it. Can you load up your WSDL in a browser successfully?

Joshua Belden
The exception is created and thrown by the WebService. And it is a SoapException.
crauscher
Joshua is correct. Sending exceptions obviously works, or the feature would have been fixed in the last seven years or so. Something else is wrong.
John Saunders
@crascher: ASMX web services do not return HTML instead of SOAP Faults. I guarantee it.
John Saunders
Do what the error says, turn off custom errors and you'll see what the error is.
Joshua Belden
As I said, it is not the whole exception message, only a part of it. Due to the reason that I have to display the exception message in a message box the whole html stuff makes the message big. That's why I want to get rid of it. An I throw a soapexception on the server side and only take the message on the client side out the incoming exception and display it.
crauscher
I recieve an InvalidOperationException.
crauscher