2012-05-10 3 views
1

Я пытаюсь передать строго типизированные ошибки FaultException из службы WCF клиенту Silverlight, но все, что я получаю, является общим «Удаленный сервер возвратил ошибку: NotFound». ответ, при использовании одного и того же кода для генерации общих исключений Fault отлично работает.строго типизированный FaultExceptions не работает

Итак, если я это сделаю Throw New FaultException() Я верну его обратно в параметре e.Error обратного вызова Silverlight, а Throw New FaultException(Of clsServiceFault)(clsServiceFaultInstance) приводит к не найденной ошибке.

clsServiceFault уже был объявлен как контракт данных, например, так:

<DataContract()> _ 
Public Enum ServiceFaultTypes 
    LoginFailed 
    SessionExpired 
End Enum 

<DataContract()> _ 
Public Class clsServiceFault 

    Public Sub New() 
    End Sub 

    Public Sub New(iType As ServiceFaultTypes, iMessage As String) 
     Type = iType 
     Message = iMessage 
    End Sub 

    <DataMember()> _ 
    Public Property Type As ServiceFaultTypes 

    <DataMember()> _ 
    Public Property Message As String 

End Class 

метод WCF, в котором вина брошено был украшен атрибутом FaultContract и я также изменения HTTP ответа код состояния до 200.

<OperationContract()> _ 
<FaultContract(GetType(clsServiceFault))> _ 
Public Function GetCustomersData(...) 

... 
System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = Net.HttpStatusCode.OK 
Throw New FaultException() 'Works 
Throw New FaultException(Of clsServiceFault)(new clsServiceFault(..)) 'Does not work 
... 
End Function 

Что мне здесь не хватает?

+0

Вы используете услугу REST. У этого даже _use_ 'FaultException'? –

ответ

0

Вы используете SilverlightFaultBehavior для украшения вашего сервиса? Если нет, это может ответить на ваш вопрос.

+0

Что значит? SilverlightFaultBehavior в указанной вами ссылке - это просто имя настраиваемого класса, которое происходит из BehaviorExtensionElement и реализует IEndpointBehavior, которое создано и зарегистрировано, чтобы вернуть код статуса http 200 даже при исключении исключений. Операция 'System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = Net.HttpStatusCode.OK' делает то же самое. – lollercoaster

+0

Если вы добавите службу WCF с поддержкой Silverlight на ваш хост ASP.NET, класс SilverLightFaultBehavior автоматически интегрируется в ваш проект, и новая служба будет связана с ним. Сильно типизированные ошибки работают, пока вы удаляете этот атрибут. Если вы удалите атрибут, они перестанут работать. Я никогда не сомневался в деталях реализации SilverlightFaultBehavior. –

Смежные вопросы