문제

사용할 유형을 지정할 웹 서비스를 작성할 수있는 방법이 있습니까? 특히 클라이언트와 서버에서 동일한 유형을 사용하여 코드 복제를 줄일 수 있기를 원합니다.

과도한 단순화 된 예 :

    public class Name
    {
        public string FirstName {get; set;}
        public string Surname { get; set; }

        public override string ToString()
        {
            return string.Concat(FirstName, " ", Surname);
        }
    }

수업에서 기능성을 재조정하고 싶지 않습니다. 또 다른 것은이 클래스를 조작하는 존재하는 모든 코드가 클라이언트 측면에서 생성 된 클라이언트 측 클래스가 다른 유형이기 때문에 클라이언트 쪽을 작동시키지 않는다는 것입니다.

도움이 되었습니까?

해결책

좋아, 나는 이것이 비누의 일부에 대한 명백한 디자인 결정 이었다는 것을 알고있다. 그래서 당신은 실제로 이것을 생각하지 않습니다. 나는 다음을 발견했다 페이지 그 이유를 설명합니다.

서비스는 클래스가 아닌 스키마 및 계약을 공유합니다. 서비스는 계약을 통한 스키마 및 행동을 통해 구조의 표현에만 상호 작용합니다. 서비스의 계약은 메시지 구조 및 메시지를 통한 순서 제약 조건을 설명합니다. 표현식의 형식은 들어오는 메시지를 기계로 검증 할 수 있습니다. 들어오는 메시지의 기계 검증을 통해 서비스의 무결성을 보호 할 수 있습니다. 계약과 스키마는 시간이 지남에 따라 안정적으로 유지되어야하므로 유연하게 구축하는 것이 중요합니다.

다른 두 가지 가능성이 있다고 말했습니다.

  1. Visual Studio 또는 WSDL.exe를 사용하여 웹 참조를 생성하십시오. 그런 다음 생성 된 reference.cs (또는 .vb) 파일로 이동하여 유형을 명시 적으로 삭제하십시오. 그런 다음 다른 어셈블리에있는 유형으로 리디렉션하십시오.
  2. WSDL.exe의 클라이언트 측의 웹 서비스간에 유형을 공유 할 수 있으며 /ShareTypes 매개 변수를 공유 할 수 있습니다.

다른 팁

웹 서비스와 클라이언트간에 유형 또는 구조를 공유하려면 웹 서비스 프로젝트에 공개 구조를 추가하십시오.

public struct Whatever
{
    public string A;
    public int B;
}

그런 다음이 구조물이있는 웹 서비스에 메소드를 반환 유형으로 추가하십시오.

[WebMethod]
public Whatever GiveMeWhatever()
{
    Whatever what = new Whatever();
    what.A = "A";
    what.B = 42;
    return what;
}

클라이언트의 웹 참조를 업데이트 한 후에는 클라이언트 응용 프로그램에서 무엇이든 유형의 스트러크를 만들 수 있습니다.

Webreference.Whatever what = new Webreference.Whatever();
what.A = "that works?";
what.B = -1; // FILENOTFOUND

이 기술을 사용하면 한 곳 (웹 서비스 프로젝트)에서 앞뒤로 전달하는 데 필요한 구조의 정의를 유지할 수 있습니다.

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