Метод «XYZ» не может быть отражен

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

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

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

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


person Andy Rose    schedule 25.09.2008    source источник


Ответы (9)


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

person kdanylo    schedule 02.12.2011
comment
Вы сэкономили мне часы,,,, - person PhillyNJ; 08.07.2015
comment
И баланс восстановлен - я потерял 5 часов, прежде чем нашел этот пост - person Braydie; 09.11.2016

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

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

person Andy Rose    schedule 13.01.2009
comment
Вы отметили это как ответ, но на самом деле забыли упомянуть, как вы его решили? - person AaA; 23.01.2015
comment
@BobSort извините, очень давно вспомнил, что именно я сделал, но это было бы похоже на ручное обновление прокси-классов, созданных VS для доступа к службе, для использования ожидаемых типов данных. - person Andy Rose; 23.01.2015
comment
На самом деле мне тоже удалось это исправить, был сгенерирован класс свойств с тем же именем, что и метод веб-сервиса. Я переименовал класс, и он исправил - person AaA; 26.01.2015
comment
Я полагаю, вы избавили меня от головной боли. Я добавил несколько частичных классов, основанных на .xsd, и добавил ctor по умолчанию. Спасибо! - person Bonez024; 18.02.2019

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

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

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

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

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

person Dean    schedule 25.09.2008

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

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

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

person Richard    schedule 25.09.2008

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

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

person Tod Flak    schedule 02.02.2012

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

person Gerrie Schenck    schedule 25.05.2009

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

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

person Has AlTaiar    schedule 10.07.2013

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

person Qazi    schedule 12.11.2014

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

person justAlex    schedule 22.07.2016