2009-09-30 9 views
2

내 테스트 웹 프로젝트 중 하나 인 .aspx에 대한 코드 숨김에서이 ​​변수를 반환 된 객체로 설정하려고합니다. 내 웹 프로젝트에서 웹 서비스에 대한 참조를 얻었으니 괜찮습니다.소스 유형을 대상 유형으로 변환 할 수 없습니다.

나는 우리의 웹 서비스 방법 중 하나를 호출을 만드는 중이라서 다음이 .asmx IssueDebit 수익률

CompanyName.CC.DebitResponse debitRespnose = CCService.IssueDebit(...); 

는 CompanyName.CC.DebitResponse을 입력합니다.

내가 설정하고있어 변수 내 서비스 방법에 정의 된 반환 형식을 의미
"Cannot convert source type MyWebTestProject.CCService.DebitResponse to target type CompanyName.CC.DebitResponse" 

정확히 동일합니다

는하지만이 오류가 발생합니다. 그러면 왜 불평할까요? 내 웹 서비스에서

, 여기 IssueDebit입니다 :

public DebitResponse IssueDebit(...) 
{ 
... 
} 

은 내가 IssueDebit에서 DebitResponse이 갱신 형 CompanyName.CC.DebitResponse

의 것을 확실히 알고있다.

좋아, 나는 매우 붙어있다. 여기에 실제 코드가 있습니다 (개인 정보 보호를 위해 이름을 변경하기 전). 하지 않는이 중 하나를 다시 붙여 넣으세요 (또는이 민감 당신이 이름을 변경 대폭 않는 경우)

http://www.elbalazo.net/post/codebehind.txthttp://www.elbalazo.net/post/webservice.txt

이 실제 코드입니다. 코드 숨김에서 IssueDebit을보십시오.

테스트 웹 프로젝트에있는 웹 서비스 참조의 이름은 LitleService입니다.

개체 탐색기에서 해당 서비스를 보면 충돌하는 유형이 있음을 알 수 있습니다. 그렇다면 왜 .asax에 정의 된 클래스가 없어도 그 유형은 내 서비스에 포함됩니까? 내 코드 숨김에서 스텁 또 다른 방법은

http://www.elbalazo.net/post/webservice_objectexplorer.jpg

, 나는 여기에 PARAM에 모호한 참조를 받고 있어요 :

그렇게
private void SetIssueDebitResults(ServiceAuthResponse response) 
    { 
     //not implemented 
    } 

Ambiguous Reference: 
xxx.Litle.ServiceAuthResponse 
WebServiceTesting.LitleService.ServiceAuthResponse 

가 왜 이런 내 저 작은 서비스 ServiceAuthResponse의 오브제를 얻을 것 실제 ServiceAuthResponse 클래스의 출처와 정의가 xxx.Litle.ServiceAuthResponse ... 완전히 다른 프로젝트 일 때? 그 어셈블리를 두 웹 프로젝트 (테스트 프로젝트와 실제 .asmx가 들어있는 웹 프로젝트 모두)에서 참조해야합니다.

답변

1

나는 잘못된 유형을 반환, 고의 또는하지, 당신의 웹 서비스 방식 인 것을 걸거야.

당신의 웹 서비스 클래스의 상단이 퍼팅보십시오 : 당신이 그것을 것 IssueDebit() 방법의 코드를 게시 할 경우

public DebitResponse IssueDebit(variable) 
{ 
    // stuff... 
} 

:처럼 뭔가

using DebitResponse = CompanyName.CC.DebitResponse; 

를 다음 메서드 호출을 변경 도움.

+1

어떻게 든 내 페이지의 상단에 나타났습니다 삽입 된, 나는 어떻게 모르겠 : using ServiceAuthResponse = WebServicesTesting.CCService.DebitResponse; 그럼 뭐야? 나는 이것을 삽입하지 않았다. – PositiveGuy

0

그는 다른 네임 스페이스를 혼동스럽게 보입니다 ... 변수가 완전히 일치하면 캐스팅 할 수 있습니다.

CompanyName.CC.DebitResponse debitRespnose = (CompanyName.CC.DebitResponse)CCService.IssueDebit(...); 
+0

은 이미 시도했지만 작동하지 않았다 : 당신은 사용해야합니다. 변수를 설정하려고하면 네임 스페이스가 문제가되는 이유는 메서드가 반환하는 것과 동일한 유형입니까? – PositiveGuy

0

바비 (Bobby)의 답변에 따라 시도해 보셨습니까?

CompanyName.CC.DebitResponse debitResponse = 
    CCService.IssueDebit(...) as CompanyName.CC.DebitResponse; 
+0

예, 작동하지 않았습니다. – PositiveGuy

+0

기본 제공 변환을 통해 유형을 변환 할 수 없습니다. – PositiveGuy

0

는 지금까지 내가 아는 한, 닷넷 2.0 웹 서비스 (ASMX)가 자동으로하는 방법 (매개 변수 및 유형을 반환) 호출 WSDL에 필요한 유형의 매핑을 생성합니다.

웹 서비스를 다른 프로젝트 (이 경우 귀하의 웹 사이트)에 웹 참조로 추가하면 프록시 클래스가 자동으로 생성됩니다. 이러한 경우 MyWebTestProject.CCService 네임 스페이스에있는 것입니다.

유형 "유형 CompanyName.CC.DebitResponse을 대상으로 소스 유형의 MyWebTestProject.CCService.DebitResponse 변환 할 수 없습니다": 나는 당신의 오류 메시지가 잘못 보여줍니다 무엇인지 정확히 DebitResponse 코드에 있지만 확실하지 않다 proxy-class에 의해 반환 된 webservice는 사용자의 웹 서비스에서 사용하는 CompanyName.CC.DebitResponse 유형이 아닙니다. WSDL에서 생성 된 클래스입니다. MyWebTestProject.CCService.DebitResponse입니다. 웹 서비스에서 사용하는 클래스와 동일한 데이터가 모두 포함되지만 뚜렷하게 다른 클래스입니다. 반면에, 당신의 웹 서비스의 클래스에 존재하는 메소드는 존재하지 않습니다.

그래서, 간단하게 말해서 :

MyWebTestProject.CCService.DebitResponse debitResponse = CCService.IssueDebit(...); 
관련 문제