"Ошибка сериализации тела". Проблема вызова веб-службы 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 при загрузке их примера кода.