我正嘗試使用通道工廠根據此link從Silverlight客戶端調用WCF服務。與渠道工廠合作對我來說是新事物,請耐心等待!通道工廠在Silverlight中捕獲錯誤異常
在文章中提到的一切都很好。但是現在我試圖實現Fault異常,以便能夠捕獲Silverlight端的實際異常。但由於某種原因,我總是最終捕獲CommunicationException,這不符合我的目的。
這裏是我的服務合同:服務的
[OperationContract]
[FaultContract(typeof(Fault))]
IList<Category> GetCategories();
Catch塊:與異步模式的客戶端
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
);
我.dll文件共享DataContract無論是服務和客戶端應用程序,因此,他們指的是相同的數據合同類(A類&故障)
請告訴我,我在做什麼錯之間?
UPDATE:我清楚地看到從Fiddler服務發送的故障異常。這使我相信我在客戶端丟失了一些東西。
我不我想要捕捉正常的例外情況。我只想捕捉服務引發的故障異常。我認爲沒有啓用Silverlight的WCF服務是可能的。如果我錯了,請糾正我。 – Vinod
好吧,我錯了!這似乎是唯一的方法。謝謝Andris。下面的文章派上用場: http://www.codeproject.com/KB/silverlight/SilverlightWCFService.aspx – Vinod