2009-04-10 4 views
1

(A 자동 생성 된 클래스에 정상 POCO에서) Webservice를 변경 예상 매개 변수 유형을 : Artist하는 POCOC# : 나는 클래스 라이브러리에 다음과 같은 클래스가

입니다

은 지금은 웹 서비스의 방법을 이 같은 서명 (언급 - 위 라이브러리에 대한 참조가있는)을 :

[WebMethod] 
public int Artist_AddArtist(Artist a) { 
// 
} 

내가 응용 프로그램에서이 서비스를 소비하려고 (도에 대한 참조가 클래스 라이브러리 위에서 언급 한) Artist_AddArtist 메서드의 예상 매개 변수는 Artist이 아니지만 ge 유형 인 Artist의 새 형식 자동으로 생성되는 부분 클래스 인 Reference.cs에 부합됩니다.

따라서 내 응용 프로그램에서 라이브러리의 동일한 Artist 클래스를 사용하고 있기 때문에 이제는 웹 서비스 메서드에서이 새로운 자동 생성 형식이 필요하므로 웹 서비스에이 인스턴스를 전달할 수 없습니다.

어떻게이 문제를 해결할 수 있습니까?

답변

3

아마도 WCF 서비스로 전환하는 것이 좋습니다. WCF 서비스를 사용하면 서버 및 클라이언트 측에서 동일한 유형을 재사용 할 수 있습니다.

This article은 ASMX 웹 서비스를 WCF 서비스로 마이그레이션하는 방법을 설명합니다.

+0

그래, 이제 WCF로 전환했다. –

2

문제를 해결할 수 없으며 그렇게해서는 안됩니다.

다른 사람들은 생성 된 파일을 편집하는 등의 작업을 수행 할 것이라고 말하지만 좋은 방법은 아닙니다. 웹 참조가 업데이트되는 즉시 변경 사항이 사라집니다.

보고 계신 디자인입니다. Basics: How Web Services Work을 참조하십시오.

간단히 말해서 "웹 참조 추가"를 사용하면 Visual Studio는 서비스에서 WSDL 파일을 다운로드하고 WSDL의 XML 스키마를 사용하여 스키마에서 설명하는 XML을 나타내는 일부 프록시 클래스를 만듭니다. 또한 서비스 자체의 프록시 클래스를 만들고 서비스의 각 작업에 대한 메서드를 포함합니다.

프록시 데이터 클래스는 서비스에서 수신하려고하는 XML로 직렬화 할 수 있으며 서버가 응답으로 보내는 XML에서 역 직렬화 할 수 있습니다.

클라이언트와 서비스가 모두 .NET이기 때문에이 문제 만 생각하면됩니다. 클라이언트가 Java로 작성된 경우 클래스를 공유하지 않을 것입니다.


WCF는 필요한 경우이 작업을 수행 할 수 있습니다. 클라이언트와 서비스 간의 종속성을 소개합니다 (둘 다 클래스를 포함하는 어셈블리의 호환 버전을 사용해야 함).하지만 수행해야 할 경우 옵션이 있습니다. 이 클래스에서 클라이언트와 서비스가 모두 사용해야하는 동작이있을 때 유용합니다.

+0

그렇다면 '원본'클래스의 인스턴스를 '자동 생성'클래스의 인스턴스로 변경하는 가장 좋은 방법은 무엇입니까? 원본의 속성 값을 통해 반영하고 각각을 예상 된 유형 인스턴스에 추가합니까? –

+0

필요가 없습니다. 자동 생성 유형을 보냅니다. –

+0

그렇다면 특정 웹 서비스와 애플리케이션을 연결해야한다는 의미입니까? 따라서 공유 라이브러리의 사용을 무효로합니다. –

관련 문제