WP7: Ошибка сериализации строки в вызове WebService - PullRequest
2 голосов
/ 23 февраля 2011

Я получаю эту ошибку, когда пытаюсь отправить данные в Web-сервис с WP7.

При попытке десериализации сообщения форматировщик выдал исключение: Ошибка в десериализации тела сообщения запроса на операцию 'SubmitMobileData».Максимальная квота длины строки содержимого (8192) была превышена при чтении данных XML.Эту квоту можно увеличить, изменив свойство MaxStringContentLength объекта XmlDictionaryReaderQuotas, используемого при создании программы чтения XML.Строка 178, позиция 21.

Я думаю, это не мой веб-сервис.На самом деле мой WP7 пытается сериализовать данные внутри XML.Ну, мой вопрос, как мне установить свойство XmlDictionaryReaderQuotas. MaxStringContentLength в моем приложении WP7.Я знаю, как установить его на клиенте настольного приложения и внутри веб-службы.Но я не могу установить его в файле App.XAML приложения WP7.

РЕДАКТИРОВАТЬ: Я разместил файл client.config ниже.Я решил оставить адрес службы открытым для тех, кто хочет узнать о подключении к услуге.Когда мы ответим на этот вопрос, я удалю соединение wcf.

<configuration>

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IMobileUtilities" maxBufferSize="2147483647" 
                maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://utopiapimp.com/services/MobileUtilities.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMobileUtilities"
            contract="PimpMobileService.IMobileUtilities" name="BasicHttpBinding_IMobileUtilities" />
    </client>
</system.serviceModel>

Ответы [ 2 ]

3 голосов
/ 01 марта 2011

Указанное исключение выдается, когда:

  1. Приложение, в котором размещен веб-сервис, не указало maxStringContentLength квоту считывателя (поэтому используется по умолчанию) или слишком мала;
  2. Длина хотя бы одного из строковых аргументов вызванного веб-метода нарушила maxStringContentLength квоту чтения.

Как говорится в исключительной ситуации, ошибка произошла, когда десериализовано тело сообщения запроса для операции ' SubmitMobileData '.

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

EDIT

Измените конфигурацию конфигурации вашей службы, чтобы увеличить ограничение длины содержимого элемента XML. Не копируйте это в вашу конфигурацию, просто объедините это в:

<system.serviceModel>
    <services>
        <service name="Server.MobileUtilities">
            <endpoint address="http://utopiapimp.com/services/MobileUtilities.svc"
                      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMobileUtilities"
                      contract="ServiceReferences.IMobileUtilities" />
        </service>
    </services>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IMobileUtilities">
                <!-- Content of each XML element can be up to 10 million characters. -->
                <readerQuotas maxStringContentLength="10000000" />
            </binding>
        </basicHttpBinding>
    </bindings>
</system.serviceModel>

EDIT : Мне кажется, что проблема со службой в конце концов.

Если бы проблема была на стороне клиента, вместо полученного вами исключения возникнет следующее исключение:

Превышена максимальная квота на длину содержимого строки (8192) при чтении данных XML. Эту квоту можно увеличить, изменив свойство MaxStringContentLength в объекте XmlDictionaryReaderQuotas, используемом при создании средства чтения XML.

Поскольку сборки Silverlight являются подмножеством сборок WP7, квоты считывателей на стороне клиента всегда устанавливаются на максимальные значения.

Это часть определения класса XmlDictionaryReaderQuotas:

static XmlDictionaryReaderQuotas()
{
    maxQuota = new XmlDictionaryReaderQuotas(0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff);
}

public static XmlDictionaryReaderQuotas Max
{
    get
    {
        return maxQuota;
    }
}
0 голосов
/ 02 марта 2011

Итак, в общем, что вы хотите сделать, так это изменить характеристики вашего соединения с приложением WP7, верно? Прежде чем вы сможете вызвать удаленный метод, вы должны создать экземпляр объекта soapclient, а затем вызвать его OpenAsync() метод. Когда вы инициализируете этот мыльный клиент, вы можете предоставить System.ServiceModel.Channels.Binding(). Что если вы создадите эту привязку программно и в этом наборе соответствующий maxStringContentLength?

...