Как получить сообщение, удобное для конечного пользователя, при передаче неверного параметра типа веб-службе WCF? - PullRequest
1 голос
/ 24 июня 2010

Допустим, у меня есть WCF

Foo(int param);

Клиент передает строку JSON. Вместо передачи целого числа они передают строку.

Теперь система возвращает ошибку 500 клиенту. Журнал событий говорит, что мне нужно добавить includeExceptionDetailInFaults = "true" в мой файл конфигурации, если я хочу, чтобы дружеское сообщение было возвращено. Я иду и делаю это, но потом все равно получаю ошибку 500 и ошибку журнала событий, утверждающую, что я не могу добавить расширение 'serviceDebug' к своему поведению конечной точки, потому что базовый тип поведения не реализует IEndpointBehavior.

Что это значит?

1 Ответ

0 голосов
/ 24 июня 2010

Прежде всего: где вы добавили поведение <serviceDebug> и как? Можете ли вы показать нам? <serviceDebug> необходимо добавить в раздел <serviceBehavior> на вашем сервере - не раздел поведения конечной точки. В конце концов, это поведение службы (оно влияет на весь сервис), а не поведение конечной точки (которое влияет только на одну конечную точку, но не на другие).

Итак, вы должны иметь:

  <serviceBehaviors>
    <behavior name="debug">
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>

в конфигурации на стороне сервера (web.config или app.config), а затем примените это поведение службы к тегу службы:

<services>
   <service name="...."
            behaviorConfiguration="debug">
    ....

Во-вторых: ошибка 500 является внутренней ошибкой сервера, поэтому сервер не может интерпретировать и обрабатывать ваш ввод. Лучше всего сделать некоторую проверку на стороне клиента перед фактической отправкой этого ввода в службу, чтобы избежать ошибок такого рода.

Если вы не можете сделать это, то, возможно, вам нужно добавить еще немного логики в ваш сервис, чтобы вы могли фиксировать и выяснять ошибки такого рода, прежде чем они взорвут код вашего сервиса.

И в-третьих, окончательное решение: вы могли бы написать инспектор параметров на стороне клиента, чтобы перехватывать эти неправильные параметры еще до их отправки на сервер и реагировать соответствующим образом. WCF очень расширяемый таким образом. См. MSDN Как проверять или изменять параметры или в этом блоге , если вам интересно узнать больше об инспекторах параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...