Это один из раздражающих моментов в подходе веб-сервисов Microsoft - если запрос не может быть десериализован в объекты в сигнатуре вашего веб-метода, тогда потребитель сервиса получает загадочное сообщение. И, наконец, запрос никогда не попадает в ваш веб-сервис, потому что его нельзя десериализовать, и вы не сможете корректно обработать ошибку.
Что бы я сделал, чтобы помочь с этими типами проблем, - это создать новый SoapExtension, который просто позволяет вам выводить необработанный XML в удобное для вас место назначения (файл или трассировку для чтения в DebugView или как угодно еще ). Код будет идти на этапе BeforeDeserialize. Вы можете включить SoapExtension через web.config, если хотите исследовать одну из этих проблем. Недостатком использования web.config для добавления SoapExtension является то, что он будет активен для всего веб-приложения. Вы можете добавить некоторые дополнительные пользовательские настройки, которые позволят вашей службе регистрировать информацию только для определенной конечной точки или определенного веб-метода, если вы захотите.
Обычно, просто увидев входящий XML, вы можете увидеть, в чем проблема. Если нет, то вы можете попытаться вручную запустить захваченный XML через небольшую программу, которая вызывает сериализатор XML, и посмотреть, сможете ли вы узнать, что происходит. Еще одним полезным инструментом является Web Service Studio 2 , который представляет собой тестовый набор, который позволяет вводить данные и вызывать вашу службу (а также отправлять любой XML-файл по вашему желанию).
С точки зрения вашей конкретной проблемы, вот мои предположения. Похоже, что символ ASCII null кодируется и отправляется вашему сервису, что недопустимо в соответствии со спецификацией XML. Простой ответ - не отправлять этого персонажа. Но кто посылает этого персонажа? Это клиент .NET? У вас есть контроль над клиентом? Если вам нужно обойти чью-то ошибку, вам, возможно, придется заменить оскорбительный символ (ы) другим символом (возможно, пустой строкой).