2008-09-25 5 views
7

타사 웹 서비스를 사용하고 ASP.NET 웹 응용 프로그램에서 호출하려고합니다. 나는 다음과 같은 System.InvalidOperationException 예외가 발생 웹 서비스의 인스턴스 때 는 그러나 :메서드 'XYZ'를 반영 할 수 없습니다.

방법 'ABC.XYZ를'반영되지 않을 수 있습니다. System.InvalidOperationException : 메서드 'ABC.XYZ'을 (를) 반영 할 수 없습니다. ---> System.InvalidOperationException : 네임 스페이스 'http://mysoftware.com/ns'의 XML 요소 'MyDoc'이 (가) 메서드 및 형식을 참조합니다. 메서드의 메시지 이름을 WebMethodAttribute를 사용하여 변경하거나 XmlRootAttribute를 사용하여 유형의 루트 요소를 변경하십시오.

내가 수집 할 수있는 것으로부터 웹 서비스의 메소드와 유형 사이에 모호성이있는 것으로 보입니다. 누구나이 예외의 원인을 분명히 할 수 있습니까?이 문제를 해결하기 위해 할 수있는 일이 있습니까? 아니면 웹 서비스 소유자가 바로 잡아야합니까?

편집 : Visual Studio 2008에서 프록시 클래스를 만들었습니다. 불행히도 로컬로 설치된 thrid party 앱의 웹 서비스이므로 wsdl에 대한 링크를 제공 할 수 없습니다.

답변

3

문제가 자바로 작성된 VS와 웹 서비스 간의 데이터 유형 문제까지 보인다 도움 .

궁극적으로 VS에서 만든 클래스 및 스키마 파일을 수동으로 편집하여 수정되었습니다.

+0

답변으로 표시했으나 실제로 어떻게 해결했는지 잊지 않았습니까? – AaA

+2

@BobSort 죄송합니다. 정확히 내가 한 일을 기억하기 위해 오래 전부터 VS가 기대했던 데이터 유형을 사용하기 위해 서비스에 액세스하기 위해 만든 프록시 클래스를 수동으로 업데이트하는 줄에 있었을 것입니다. –

+0

사실 나는 그것을 고칠 수있었습니다. webservice 메소드와 같은 이름으로 생성 된 속성 클래스가있었습니다. 나는 클래스 이름을 변경하고 고정했습니다. – AaA

1

wsdl이 서비스에 의해 방출되거나 wsdl.exe 또는 serviceutil이 이해할 수있는 형식이 아닌 것 같습니다. wsdl이나 링크를 게시 할 수 있습니까?

어떻게 프록시 클래스를 만드십니까?

또한 당신은 내가 제 3 자 웹 서비스를 소비 할 때 나는 똑같은 문제를 가로 질러 온의 유효

2

확인하기 위해 시도하고 WSDL 스키마에 대한 WSDL의 유효성을 확인하는 것 같아서. 이 인스턴스의 문제는 참조 파일의 mustUndertand 속성이 Boolean을 찾고 있으므로 네임 스페이스 속성이 문자열을 찾았습니다.

참조를 살펴보면 불쾌한 속성을 식별 할 수 있었고 간단히 메서드 서명에 "재정의"를 추가 할 수있었습니다.

서비스를 업데이트 할 때 이상적이지는 않지만이 작업을 수행하는 데는 다른 방법이 없습니다.

참조 파일이 솔루션 탐색기에서 "모든 파일"을 선택 찾으려면

희망이

0

.NET 2.0 만 설치된 시스템에서 3.5 응용 프로그램을 실행하려고했기 때문에 동일한 메시지가 표시되었지만 누락 된 System.Runtime.Serialization.dll로 인해 발생했습니다.

13

오늘 이전에 같은 문제가 발생했습니다. 이유는 Visual Studio에서 생성 된 클래스 중 하나에 매개 변수로 전달 된 클래스가 기본 매개 변수가없는 생성자를 갖고 있지 않기 때문입니다. 일단 내가 그것을 추가했다, 오류가 사라졌다.

+0

시간이 절약되었습니다. ,,,, – PhillyNJ

+0

균형이 복원되었습니다.이 게시물을 찾기 전에 5 시간을 잃었습니다. – Braydie

1

내 경우에는 메서드에 의해 반환되는 클래스에서 기본 매개 변수가없는 생성자를 노출하지 못했기 때문에 "메서드를 반영 할 수 없습니다"오류가 발생했습니다.

저는 VB.NET에서 작업하고있었습니다. 내 반환 클래스에서 몇 가지 매개 변수를 취한 "New (..)"메서드를 선언했습니다 (코드에서 사용하고 싶기 때문입니다). 그러나 그렇게함으로써 VB가 장면 뒤에 추가하는 기본 (숨겨진) 매개 변수없는 New() 생성자를 억제했습니다. 분명히 웹 서비스 핸들러는 매개 변수없는 생성자를 사용할 수 있어야합니다. 내 클래스에 매개 변수없는 New() 생성자를 다시 추가하자마자 모두 잘 동작했습니다.

0

동일한 문제가 있지만 WebMethod 매개 변수 중 하나에 interface 유형의 구성원이있어 그 중 VS이 serialise 할 수없는 것으로 나타났습니다. 여기에 disco 파일을 다운로드하려고 예외는

System.InvalidOperationException : 더 자세한 내용은 내부 예외를 참조 멤버 'Leopard.JobDespatchParameters.SendingUser'유형 'Leopard.Interfaces.IUser'의 를 직렬화 할 수 없습니다 . ---> System.NotSupportedException : 멤버를 serialize 할 수 없습니다. Leopard.JobDespatchParameters.SendingUserLeopard.Interfaces.IUser는 인터페이스이므로 인터페이스입니다.

0

낡은 실이지만 다른 문제가 있습니다. 어쩌면 도움이 될지도 모릅니다. 참조 된 dll이 문제를 일으킨 데이터 계층과 서비스 계층의 두 버전간에 혼합되었습니다.

0

이 오류가 발생할 수있는 또 다른 시나리오 : 코드 병합 중에 미끄러 진 웹 서비스에서 동일한 이름 (그러나 다른 매개 변수)을 가진 다른 웹 메서드가있었습니다. 이전 방법을 삭제 한 후에도 효과가있었습니다.