2013-05-28 2 views
-1

Я делаю вызов Async от клиента к службе WCF. Служба выбрасывает исключение FaultException. Когда я поймаю исключение в обработчике событий «Завершено» моего клиента, он получает исключение, но теряет всю информацию об этом. Все, что я получаю, это общий тип Exception с этим сообщением об ошибке: «CommunicationException: удаленный сервер возвратил ошибку: NotFound»). У меня естьExceptionDetailInFaults установлено значение true.WCF Throws FaultException, клиент ловит Исключение, но теряет всю информацию

Почему я не могу поймать исключение FaultException?

Благодарим за помощь.

Здесь уместна код:

службы WCF код

[WebMethod] 
    [FaultContract(typeof(DivideByZeroException))] 
    public int CountResults(FilterArgs args) 
    { 
     ... 
    DivideByZeroException divByZero = new DivideByZeroException(); 
    throw new FaultException<DivideByZeroException>(divByZero); 

Клиентский код

void seasClient_CountResultsCompleted(object sender, CountResultsCompletedEventArgs e) 
    { 
     try 
     { 
      ... 
     } 
     catch (FaultException ex) 
     { 
      MessageBox.Show("FaultException" + ex.Message); 
     } 
     catch (TimeoutException ex) 
     { 
      MessageBox.Show("TimeoutException" + ex.Message); 
     } 
     catch (CommunicationException ex) 
     { 
      MessageBox.Show("CommunicationException" + ex.Message); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Exception" + ex.Message); 
     } 

и мой e.Error.ToString сообщение():

System.ServiceModel.CommunicationException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. 
    at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 
    at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClassa.<EndGetResponse>b__9(Object sendState) 
    at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__0(Object sendState) 
    --- End of inner exception stack trace --- 
    at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) 
    at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
    at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result) 
    --- End of inner exception stack trace --- 
    at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result) 
    at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result) 
    at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result) 
    at WebAnalysis.SeasService.SeasServiceSoapClient.SeasServiceSoapClientChannel.EndCountResults(IAsyncResult result) 
    at WebAnalysis.SeasService.SeasServiceSoapClient.WebAnalysis.SeasService.SeasServiceSoap.EndCountResults(IAsyncResult result) 
    at WebAnalysis.SeasService.SeasServiceSoapClient.EndCountResults(IAsyncResult result) 
    at WebAnalysis.SeasService.SeasServiceSoapClient.OnEndCountResults(IAsyncResult result) 
    at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result) 

ответ

1

Ваш служебный код не является WCF i f используется атрибут [WebMethod]. Это устаревшая служба ASMX, которая не использует FaultException. Изучите класс SoapException, если вы не можете переключиться на использование WCF.

+0

Спасибо, Джон. Я, очевидно, новичок, и я унаследовал этот код. – mschu

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