.net webservice force webservice는 프록시 클래스가 아닌 로컬 객체 클래스를 사용하도록합니다.

StackOverflow https://stackoverflow.com/questions/216884

문제

Windows Forms Application (.NET, 동일한 솔루션 모두)에서 호출하는 웹 서비스가 있으며 웹 서비스가 프로젝트의 다른 곳에서 사용자 정의 객체를 반환하기를 바랍니다. 내 솔루션의 세 번째 프로젝트에있는 것처럼 둘 다 참조를 공유합니다. 웹 서비스를 호출하면 "사람"객체를 반환하지만 웹 서비스의 네임 스페이스에 있으며 웹 서비스 자체가 생성 한 프록시 클래스에서 생성됩니다. 따라서, 나는 그것을 조작하고 그것을 내 프로그램으로 되돌릴 수 없다. 이것은 웹 서비스 네임 스페이스의 프록시 사본이 아닌 클래스의 공유 사본을 기반으로 "사람"객체를 기대하고있다. 올바른 클래스 유형으로 ctype.

웹 서비스가 프록시 사본이 아닌 로컬 클래스 사본을 사용하도록하려면 어떻게해야합니까? 이 맥락에서 내 질문이 의미가 있습니까? 그렇지 않다면, 나는 그것을 명확히하겠습니다.

참고 - 나는 모든 매개 변수를 Byref로 전달하고 반환 된 값을 사용하여 반환시 생성 한 객체의 사본을 채 웁니다. 그것은 이것을하는 가장 좋은 방법이 될 수 없습니다!

도움이 되었습니까?

해결책

svcutil.exe를 사용하여 WCF 클라이언트 프록시를 생성하는 경우 명령 줄에서 사용 /참조하여 공통 클래스가 포함 된 어셈블리를 지정할 수 있습니다. Svcutil은 서비스 프록시 네임 스페이스에서 새로운 정의를 생성하는 대신 해당 클래스 정의를 재사용해야합니다.

또한 이는 일반 클래스가 직렬화 가능하고 가치로 전달되는 경우에만 작동합니다 (즉, 서비스 계약이 아닌 데이터 계약으로 노출됨).

다른 팁

WCF를 사용하는 경우 클라이언트와 소비자 간의 동일한 데이터 계약 및 서비스 인터페이스를 사용하는 것이 매우 쉽습니다. 생성 된 프록시 클래스를 컴파일하고 올바른 네임 스페이스를 사용하도록 수정하거나 channeflactory 당신을위한 동적 프록시를 만들기위한 클래스.

첫 번째 솔루션은 매우 부서지기 쉬우 며 서비스 인터페이스가 변경 될 때마다 프록시 클래스를 수정합니다. 두 번째 기술은 상당히 잘 작동하며 이전 프로젝트에서 사용했습니다. 이러한 메소드 중 하나를 사용하면 모든 발신자가 최신 버전의 인터페이스를 최신 상태로 유지해야합니다.

문제를 설명하는 방식에서 서비스와 클라이언트가 동일한 인스턴스를 공유하기를 원하는 것처럼 들립니다. WCF는 서비스를 보내고 서비스를 보내면서 유형을 직렬화하고 실시 할 수 있으므로 좀 더 영리한 일을해야합니다. 이것이 당신이 의미하는 바입니까?

확실하지 않지만 .NET 웹 서비스를 컴파일하면 로컬에 사용해 볼 수있는 DLL 파일을 만듭니다. 그러나 서비스 지향적 애플리케이션을 구축 할 때는 데이터 액세스 계층, 로직 레이어, 서비스 계층, UI 계층, 컨트롤러 계층 및 컨트롤러 계층에서 다른 레이어를 만들기 위해 솔루션 내에 다른 계층을 만듭니다. 데이터 액세스 계층 및 로직 레이어와 연결된 다음 서비스 계층에서 해당 메소드를 호출하고 UI 계층에서 호출 할 수 있으며 UI 계층 내에서 호출하면 사용하려는 경우 로컬로 호출됩니다. 서비스 계층에서 BOOL 또는 사용자 이름 등을 반환하는 메소드를 사용하여 웹 메소드를 작성합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top