Avatar billede idiotbarn Nybegynder
30. juni 2011 - 00:19 Der er 1 løsning

Exception Handling i WCF

Hej.
Jeg har siddet med en webservice ASMX som jeg kalder fra javascript. Det har virket fint, men da jeg havde brug for at styre serialiseringen gik jeg over til DataContracts og WCF. Jeg tror dog jeg har et forståelses problem, for jeg prøver at kaste en exception som skal fanges af klientkoden (javascript).

Problemet er at jeg syntes aldrig rigtigt jeg kan få anden fejlbesked på klienten end:

"Serveren kunne ikke behandle anmodningen på grund af en intern fejl. Du kan få flere oplysninger om fejlen ved at aktivere IncludeExceptionDetailInFaults (enten fra ServiceBehaviorAttribute eller fra konfigurationens funktionsmåde <serviceDebug>) på serveren for at kunne sende undtagelsesoplysningerne tilbage til klienten, eller du kan slå sporing til som beskrevet i dokumentationen til Microsoft .NET Framework 3.0 SDK, og gennemse klientens sporingslogfiler."


Jeg har prøvet at koge eksemplet ned.

Jeg har en svc:
---------------------------------------------------
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class WcfTest
{
    // To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is WebMessageFormat.Json)
    // To create an operation that returns XML,
    //    add [WebGet(ResponseFormat=WebMessageFormat.Xml)],
    //    and include the following line in the operation body:
    //        WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
    [OperationContract]
    public string DoOk()
    {
        // Add your operation implementation here
        return "Success";
    }
    [OperationContract]
    public string DoFail()
    {
        FaultReason reason = new FaultReason("Fail <- This is good :)");
        throw new FaultException(reason);
        return "Success";
    }
}
---------------------------------------------------
som er inkluderet med en scriptmanager. Jeg kalder med java script:
---------------------------------------------------
<a href="java script:void(0);" onclick="DoOk()">OK</a><br />
        <a href="java script:void(0);" onclick="DoFail()">Fail</a>
        <script>
            function DoOk() {
                WcfTest.DoOk(
                    function (result) {
                        alert("DoOk Success: "+result);
                    },
                    function (result) {
                        alert("DoOk Failed: " + result);
                    })
            }
            function DoFail() {
                WcfTest.DoFail(
                    function (result) {
                        alert("DoFail Success: " + result);
                    },
                    function (result) {
                        alert("DoFail Failed: " + result);
                    })       
            }
        </script>

Og en service model:
---------------------------------------------------
<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="WcfTestAspNetAjaxBehavior">
      </behavior>
    </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="WcfTestAspNetAjaxBehavior">
    <enableWebScript />
    </behavior>
  </endpointBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />
  <services>
  <service name="WcfTest">
    <endpoint address="" behaviorConfiguration="WcfTestAspNetAjaxBehavior"
    binding="webHttpBinding" contract="WcfTest" />
  </service>
  </services>
</system.serviceModel>
---------------------------------------------------


Det har ikke hjulpet mig at slå IncludeExceptionDetailInFaults  til, men burde en FaultException ikke netop kaste den info man skriver i den tilbage?

Jeg har også prøvet at markere metoden der kaster en exception med:
[FaultContract(typeof(FaultException))]    og med
[FaultContract(typeof(FaultReason))]

Målet er at klare det hele med en IErrorHandler, men ind til videre vil jeg bare gerne kunne styre det jeg får tilbage ved en exception. Har i nogen forklaring på hvorfor jeg ikke får min besked i FaultException tilbage?
Avatar billede idiotbarn Nybegynder
04. september 2011 - 13:06 #1
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester