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?