Любой код ошибки HTTP не подходит. Там нет ошибок или проблем любого рода с точки зрения HTTP, поэтому он должен быть что-то в диапазоне 200. Вы вежливо сообщаете некоторым своим пользователям, что они не будут обслуживаться, отправляя обратно документ, который сообщает им об этом. И все это хорошо.
Пользователь не сможет использовать ваше приложение . Это сознательное решение, принятое вашей бизнес-логикой, а не неудача. На уровне HTTP все честно.
редактировать
Похоже, то, на что мы смотрим, это столкновение старой школы с новой. Когда разрабатывался HTTP, не было веб-сервисов, не было ни SOAP, ни JSON, ни REST-принципов. В качестве протокола выше TCP это уже рассматривалось (близко к) уровню приложения, и были определены многие коды состояния высокого уровня. Когда сеть начала использоваться для более богатых, высокоуровневых сервисов и общих средств транспортировки «конвертов», разработчики предпочитали использовать HTTP вместо определения более нового и более чистого протокола только потому, что HTTP был повсеместным.
Таким образом, в контексте современных веб-сервисов HTTP действительно немногим больше, чем тупой транспортный уровень, и большинство его кодов можно считать неприменимыми или устаревшими. Просто выберите один, потому что он приближается к состоянию вашего приложения и находится в этом списке, что когда-то означало, что что-то может показаться безопасным, но я думаю, что это пошло бы неправильно. Вы не хотите, чтобы HTTP играл эту регулирующую роль в контексте веб-службы.