«Ошибка сериализации тела». Проблема вызова веб-службы Fedex через .NET 3.5 - PullRequest
9 голосов
/ 06 декабря 2008

Я использую веб-сервисы Fedex и сразу получаю досадную ошибку, прежде чем смогу добраться куда-либо.

При сериализации тела сообщения addressValidationRequest1 произошла ошибка: «Невозможно создать временный класс (результат = 1). ошибка CS0030: невозможно преобразовать тип 'FedEx.InterOp.AddressValidationServiceReference.ParsedElement []' в 'FedEx.InterOp.AddressValidationServiceReference.ParsedElement' ошибка CS0029: невозможно неявно преобразовать тип 'FedEx.InterOp.AddressValidationServiceReference.ParsedElement' в 'FedEx.InterOp.AddressValidationServiceReference.ParsedElement []' ». Пожалуйста, смотрите InnerException для более подробной информации.

Я использую .NET 3.5 и получаю ужасный именованный класс для меня (я не уверен, почему это не просто AddressValidationService):

AddressValidationPortTypeClient addressValidationService = new ...;

в этом классе я звоню через веб-сервис:

addressValidationService.addressValidation(request);

Это когда я получаю эту ошибку.

Единственные ссылки, которые я могу найти на эту ошибку, приходят из древних 1.1 проектов. В моем случае в моей DLL есть ссылки на System.Web и System.Web.Services, которые тогда казались проблемой.

Ответы [ 3 ]

19 голосов
/ 09 января 2009

Вам нужно только изменить [] [], а не один [].

В Reference.cs изменить

private ParsedElement[][] parsedStreetLineField;
to
private ParsedElement[] parsedStreetLineField;
and
public ParsedElement[][] ParsedStreetLine {
to
public ParsedElement[] ParsedStreetLine {
7 голосов
/ 06 декабря 2008

Оказывается, что собственная документация FedEx касается именно этого!

Я использую wsdl.exe от Microsoft для генерации кода и получаю сообщение об ошибке CS0029: Не удается неявно преобразовать тип 'fedexreq.ParsedElement' в 'fedexreq.ParsedElement []'.

Это ошибка, сгенерированная инструментом языка описания веб-служб (Wsdl.exe) для создания информации о клиенте. Когда вы публикуете схему, которая содержит вложенные узлы, для атрибута maxOccurs которых установлено значение «неограниченное», средство Wsdl.exe создает многомерные массивы в созданном файле кода. Поэтому сгенерированный код содержит неверные типы для вложенных узлов. Чтобы решить проблему, измените сгенерированный код, удалив символы массива в скобках ([]) из операторов отклонения типов данных. Для получения дополнительной информации см http://support.microsoft.com/kb/326790/en-us и http://support.microsoft.com/kb/891386

6 голосов
/ 23 декабря 2011

Примечание. Чтобы получить доступ к файлу Reference.cs, на который ссылается Simon_Weaver, откройте проект в Visual Studio и в обозревателе решений щелкните веб-ссылку, а затем посмотрите на маленькие значки в верхней части Solution Explorer. Нажмите значок «Показать все файлы», чтобы отобразить скрытые файлы. Теперь разверните веб-ссылку, затем разверните файл Reference.map внутри, и, наконец, вы увидите файл Reference.cs, который можно редактировать, заменив [] [] на []

Не путайте этот Reference.cs с Reference.cs, который вы, возможно, получили от Fedex при загрузке их образца кода.

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