"Ошибка сериализации тела". Проблема вызова веб-службы Fedex через.NET 3.5

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

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

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

AddressValidationPortTypeClient addressValidationService = new ...;

в этом классе я делаю мой вызов веб-службы:

addressValidationService.addressValidation(request);

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

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

3 ответа

Решение

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

В Reference.cs меняются

private ParsedElement[][] parsedStreetLineField;
to
private ParsedElement[] parsedStreetLineField;
and
public ParsedElement[][] ParsedStreetLine {
to
public ParsedElement[] ParsedStreetLine {

Оказывается, собственная документация 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

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

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

Другие вопросы по тегам