До сих пор я использовал веб-сервис ASMX, который я вызываю из javascript.Это работало нормально, но из-за того, что мне нужен был некоторый контроль над сериализацией, я пытаюсь перейти на DataContracts и WCF.Тем не менее, я верю, что есть кое-что, что я неправильно понял, потому что я пытаюсь поймать ошибочные исключения из клиентского кода (javascript), но единственная ошибка, которую я получаю, это: (переведено, поэтому может быть неточным)
«Сервер не смог обработать запрос из-за ошибки интерна. Вы можете получить больше информации об ошибке, активировав IncludeExceptionDetailInFaults ...»
Я попытался установить для параметра IncludeExceptionDetailInFauls значение true, которое дает некоторую информацию, но какНасколько я понял, весь смысл в создании FaultExceptions заключается в том, чтобы скрыть исключения от пользователя и только выдать немного информации?Я пытаюсь с IErrorHandler, но я создал более простой пример:
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";
}
}
, который включен в менеджер сценариев и вызывается следующим javascript:
<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>
и модель сервиса:
<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>
Я также пытался пометить метод DoFail комбинациями:
[FaultContract(typeof(FaultException))]
[FaultContract(typeof(FaultReason))]
Я что-то неправильно понял?Разве вы не сможете получить информацию об исключении, бросив FaultException
без необходимости устанавливать IncludeExceptionDetailInFaults
в true?