我正在尝试按照此链接使用通道工厂从 Silverlight 客户端调用 WCF 服务。与渠道工厂合作对我来说是新事物,所以请多多包涵!
文章中提到的一切都很好。但现在我正在尝试实现错误异常,以便我可以在 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,因此它们指的是相同的数据合同类(类别和故障)
请告诉我我做错了什么?
更新:我确实清楚地看到了 Fiddler 服务发送的故障异常。这让我相信我在客户端遗漏了一些东西。