2008-09-25 7 views
7

Мы использовали сторонний веб-сервис и пытаемся его вызывать из веб-приложения ASP.NET. Однако, когда я создаю экземпляр веб-службы следующее исключение System.InvalidOperationException брошено:Метод «XYZ» не может быть отображен

Метод «ABC.XYZ» не может быть отражено. System.InvalidOperationException: Метод «ABC.XYZ» не может быть отображен. ---> System.InvalidOperationException: XML-элемент 'MyDoc' из пространства имен 'http://mysoftware.com/ns' ссылки метод и тип. Измените имя сообщения метода , используя WebMethodAttribute или измените корневой элемент типа с помощью атрибута XmlRootAttribute .

Из того, что я могу собрать, как представляется, существует некоторая неопределенность между методом и типом в веб-службе. Может ли кто-нибудь разъяснить, вероятно, причина этого исключения, и есть ли что-нибудь, что я могу сделать, чтобы исправить это или я должен просто обратиться к владельцам веб-сервисов, чтобы исправить?

Редактировать: Visual Studio 2008 создал прокси-класс. К сожалению, я не могу предоставить ссылку на wsdl, поскольку это веб-сервис для локально установленного приложения для вечеринок.

ответ

3

Кажется, проблема вниз к вопросам типа данных между VS и вебом-службой, которая была написана на Java ,

В конечном итоге это было исправлено путем ручного редактирования файлов классов и схем, которые были созданы VS.

+0

Вы отметили это как ответ, но на самом деле забываете упомянуть, как вы его решили? – AaA 2015-01-23 07:04:38

+2

@BobSort извините, путь назад, чтобы точно помнить, что я сделал, но это было бы параллельно с ручным обновлением прокси-классов, которые VS создал для доступа к службе, чтобы использовать типы данных, которые она ожидала. – 2015-01-23 14:34:59

1

Я предполагаю, что wsdl, испускаемый или предоставленный службой, не в форме, которую может понять wsdl.exe или serviceutil - можете ли вы опубликовать wsdl или ссылку на него?

как вы создаете классы прокси?

Кроме того, вы можете попробовать и проверить WSDL к схеме WSDL, чтобы проверить его действительный

2

я сталкивался с точно такой же проблемой, когда я потреблял 3-й участника веб-службу. Проблема в этом случае заключалась в том, что свойство mustUndertand в файле ссылок искало логическое значение, в результате чего свойство namespace искало строку.

Просмотрев ссылку, я смог idenitfy оскорбительное свойство и просто добавить «переопределения» к сигнатуре метода.

Не идеален, так как в любое время, когда вы обновляете услугу, вам нужно сделать это, но я не мог найти другого пути.

Чтобы найти файл ссылки выбрать «все файлы» из проводника решения

Надеется, что это помогает

0

У меня такое же сообщение, но мое было вызвано отсутствием System.Runtime.Serialization.dll, так как я пытался запустить приложение 3.5 на компьютере с установленным только .NET 2.0.

13

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

1

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

Я работал в VB.NET. В моем классе возврата я объявил метод «Новый (..)», который взял пару параметров (потому что именно так я хотел использовать его в своем коде). Но, сделав это, я подавил конструктор New() по умолчанию (скрытый) без параметров, который VB добавляет за кулисами. По-видимому, обработчик веб-сервиса требует наличия конструктора без параметров. Как только я добавил обратно в свой класс бездонный конструктор New(), все это работало нормально.

0

У меня была та же проблема, но я обнаружил, что один из параметров WebMethod имеет член, который имеет тип interface, поэтому VS не смог сериализовать его. здесь исключение при попытке загрузить disco файлу

System.InvalidOperationException: Невозможно сериализовать член «Leopard.JobDespatchParameters.SendingUser» типа «Leopard.Interfaces.IUser», см внутреннее исключение для более подробной информации , ---> System.NotSupportedException: не может сериализовать элемент Leopard.JobDespatchParameters.SendingUser типа Leopard.Interfaces.IUser, потому что это интерфейс.

0

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

0

Другой сценарий, в котором эта ошибка может произойти: у меня просто был другой веб-метод с тем же именем (но разными параметрами) в моем веб-сервисе, который соскользнул во время слияния кода. После того, как я удалил старый метод, он сработал.

Смежные вопросы