Я пытаюсь вызвать службу WCF из клиента Silverlight, используя фабрику каналов, согласно этой ссылке . Работа с фабрикой каналов - это что-то новое для меня, поэтому, пожалуйста, потерпите меня!
Все упомянутое в статье работает просто отлично. Но теперь я пытаюсь реализовать исключения Fault, чтобы я мог уловить действительные исключения на стороне Silverlight. Но по какой-то причине я всегда ловлю CommunicationException, который не служит моей цели.
Вот мой сервисный контракт:
[OperationContract]
[FaultContract(typeof(Fault))]
IList<Category> GetCategories();
Пойманный блок услуги:
catch (Exception ex)
{
Fault fault = new Fault(ex.Message);
throw new FaultException<Fault>(fault, "Error occured in the GetCategories service");
}
Сервисный контракт для клиента с асинхронным шаблоном:
[OperationContract(AsyncPattern = true)]
[FaultContract(typeof(Fault))]
IAsyncResult BeginGetCategories(AsyncCallback callback, object state);
IList<Category> EndGetCategories(IAsyncResult result);
Вот сервисный звонок от клиента:
ICommonServices channel = ChannelProviderFactory.CreateFactory<ICommonServices>(COMMONSERVICE_URL, false);
var result = channel.BeginGetCategories(
(asyncResult) =>
{
try
{
var returnval = channel.EndGetCategories(asyncResult);
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
CategoryCollection = new ObservableCollection<Category>(returnval);
});
}
catch (FaultException<Fault> serviceFault)
{
MessageBox.Show(serviceFault.Message);
}
catch (CommunicationException cex)
{
MessageBox.Show("Unknown Communications exception occured.");
}
}, null
);
Я разделяю DataContract .dll и между сервисными и клиентскими приложениями, и, следовательно, они ссылаются на одни и те же классы контрактов данных (Category & Fault)
Скажите, пожалуйста, что я делаю неправильно?
ОБНОВЛЕНИЕ : Я ясно вижу исключение ошибки, отправленное службой в Fiddler. Это заставляет меня поверить, что я что-то упускаю на стороне клиента.