Показать исключение сервера на клиенте Silverlight - PullRequest
0 голосов
/ 30 июня 2011

Я хочу добавить возможность видеть исключение сервера на стороне клиента.

Если сервер получил какое-то исключение => я хочу показать на стороне клиента несколько MessageBox, которые будут отображать сообщение об исключении ..

Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 30 июня 2011

Прежде всего, вам необходимо активировать службу WCF для возврата подробной информации об ошибке.По умолчанию это отключено по соображениям безопасности (вы не хотите сообщать злоумышленникам все детали вашей системы в своих сообщениях об ошибках ...)

Для этого вам необходимо создать новую или изменитьсуществующее поведение службы с поведением <ServiceDebug>:

<behaviors>
    <serviceBehaviors>
       <behavior name="ServiceWithDetailedErrors">
           <serviceDebug includeExceptionDetailInFaults="true" />
       </behavior>
    </serviceBehaviors>
</behaviors>

Во-вторых, вам нужно изменить тег <service> для ссылки на это новое поведение службы:

<service name="YourNamespace.YourServiceClassName"
         behaviorConfiguration="ServiceWithDetailedErrors">
   ......
</service>

И третье:вам нужно адаптировать свое решение SL для просмотра подробностей ошибок, которые вы сейчас получаете.

И наконец: хотя этот параметр очень полезен при разработке и тестировании, вам следует отключите эти подробности ошибки для производства - см. выше, в целях безопасности.

0 голосов
/ 30 июня 2011

Если вы передаете ошибки клиенту, вы можете использовать Fault Contract:

Добавьте этот атрибут в контракт на обслуживание:

    [OperationContract]
    [FaultContract(typeof(MyCustomException))]
    void MyServiceMethod();

Создайте класс для «MyCustomException», содержащий именно ту информацию, которую вы хотите передать клиенту (в этом случае полные сведения об исключении из исключения. ToString ()).

Затем добавьте try / catch вокруг кода в реализации вашего метода обслуживания:

 public void MyServiceMethod()
 {
      try
      {
         // Your code here
       }
      catch(Exception e)
      {
         MyCustomException exception= new MyCustomException(e.ToString());
                throw new FaultException<MyCustomException>(exception);
       }
 }

На стороне клиента вы можете поставить try / catch (FaultException e) и отобразить детали, как вам нравится.

 try
        {
            // your call here
        }
        catch (FaultException<MyCustomException> faultException)
        {
            // general message displayed to user here
            MessageBox.Show((faultException.Detail as MyCustomException).Details);
        }
        catch (Exception)
        {
            // display generic message to the user here
            MessageBox.Show("There was a problem connecting to the server");
        }
0 голосов
/ 30 июня 2011

В дополнение к упомянутым Марком вещам вы также захотите переключиться на стек HTTP-клиентов, чтобы избежать страшной общей ошибки "Not Found".

bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...