Метод «XYZ» не может быть отражен - PullRequest
8 голосов
/ 25 сентября 2008

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

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

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

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

Ответы [ 9 ]

14 голосов
/ 02 декабря 2011

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

3 голосов
/ 13 января 2009

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

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

2 голосов
/ 25 сентября 2008

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

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

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

Чтобы найти справочный файл, выберите «все файлы» в обозревателе решений

Надеюсь, это поможет

1 голос
/ 02 февраля 2012

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

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

1 голос
/ 25 сентября 2008

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

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

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

0 голосов
/ 22 июля 2016

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

0 голосов
/ 12 ноября 2014

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

0 голосов
/ 10 июля 2013

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

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

0 голосов
/ 25 мая 2009

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

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