웹 서비스 컴파일러 도구

서비스 모델을 지원하기 위해 wsutil.exe 클라이언트와 서비스 쪽 모두에서 사용할 헤더를 생성합니다. 필요에 따라 클라이언트 쪽에 대한 C 프록시 파일과 서비스 쪽에 대한 C 스텁 파일을 생성합니다.

serialization을 지원하기 위해 컴파일러는 전역 요소 정의에 대한 요소 설명에 대한 헤더와 직렬화 엔진에서 사용할 프록시 파일의 모든 형식 정의 정보를 생성합니다.

사용량

WsUtil.exe [명령줄 스위치 [switch-options]:]<filename>

명령줄 스위치

WsUtil.exe 컴파일러 옵션을 지정합니다. 스위치는 순서에 따라 표시할 수 있습니다. 대시('-') 및 슬래시('/')는 동일하게 처리됩니다.

명령줄 옵션 목록

  • @filename 입력 파일을 응답 파일로 처리되도록 지정합니다. 이 옵션은 인수 목록의 모든 위치에서 여러 번 사용할 수 있습니다.
  • /wsdl:<filename>:<optional_url> 입력 파일을 wsdl 파일로 처리해야 한다고 지정합니다. 여러 wsdl 입력이 허용되고 지정된 모든 wsdl 파일이 처리됩니다. optional_url 메타데이터가 검색된 위치를 지정합니다. optional_url 지정되지 않은 경우 Wsutil은 내부적으로 고유한 URL을 생성합니다. 정책 지원도 참조하세요.
  • /xsd:<filename> 입력 파일 이름을 스키마 파일로 처리해야 한다고 지정합니다. 여러 xsd 입력이 허용되고 지정된 모든 스키마 파일이 처리됩니다.
  • /wsp:<filename>:<optional_url> 입력 파일 이름을 정책 메타데이터로 처리해야 한다고 지정합니다. 여러 wsp 입력이 허용되고 지정된 모든 정책 파일이 처리됩니다. optional_url 메타데이터가 검색된 위치를 지정합니다. optional_url 지정되지 않은 경우 Wsutil은 내부적으로 고유한 URL을 생성합니다. /nopolicy 플래그가 지정된 경우 정책 파일은 무시됩니다. 정책 지원도 참조하세요.
  • /nopolicy 정책 처리를 사용하지 않도록 설정합니다.
  • /out:<dirname> 출력 파일의 디렉터리 이름을 지정합니다.
  • /noclient 클라이언트 쪽 스텁을 생성하지 마세요.
  • /noservice 서비스 쪽 스텁을 생성하지 마세요.
  • /prefix:<string> 생성된 모든 식별자에 지정된 문자열을 앞에 추가합니다.
  • /fullname 생성된 식별자에 정규화된 파일 이름 앞에 추가합니다. 기본적으로 "name" 특성에 지정된 이름만 관련 설명에 대한 식별자를 생성하는 데 사용됩니다.
  • /string:<WS_STRING>|< WCHAR*> 기본적으로 wsutil은 xsd:string 형식에 대해 WCHAR*를 생성합니다. 애플리케이션은 이 플래그를 사용하여 해당 동작을 덮어쓰고 대신 xsd:type에 대한 WS_STRING 생성할 수 있습니다.
  • /help 도움말 메시지 표시
  • /? /help와 동일
  • /W:x 오류 처리 옵션입니다. W:0-W:4일 수 있음 | Wx
  • /nologo 콘솔 출력에 대한 컴파일러 관련 정보를 생성하지 않습니다.
  • /nostamp 생성된 파일에 대한 컴파일러 관련 정보를 생성하지 마세요.

기본적으로 컴파일러는 WSDL 파일 또는 메타데이터 교환에서 반환된 WSDL에 대해 다음 파일을 생성합니다.

  • 클라이언트 프록시({inputfilename}.c)

  • 서비스 스텁({inputfilename}.c)

  • 헤더 파일({inputfilename}.h)

    생성된 파일 이름의 루트는 입력 파일 이름입니다. 원본 입력 파일 확장명은 생성된 파일의 파일 이름 충돌을 방지하기 위해 유지됩니다. 기본적으로 클라이언트 및 서비스 스텁은 프록시 코드 다음에 생성된 서비스 스텁 코드와 함께 동일한 파일에 생성됩니다.

    기본적으로 컴파일러는 메타데이터 교환에서 반환된 스키마에 대해 XSD 파일에 대해 다음 파일을 생성합니다.

  • serialization 설명({inputfilename}.c)

  • 헤더 파일({inputfilename}.h)

    파일 이름의 루트는 서비스 이름입니다.

Wsutil.exe 생성된 모든 파일의 시작 부분에 컴파일러 옵션, 도구 버전, 적용 가능한 명령줄 옵션을 나타내는 "스탬프" 섹션을 생성합니다. 이 섹션은 /nostamp 옵션을 사용하여 생성된 파일 비교와 노이즈를 방지하여 해제할 수 있습니다.

Wsutil은 메타데이터 다운로드를 지원하지 않습니다.

Wsutil 컴파일러는 로컬 메타데이터 파일에서만 작동합니다. 이 도구는 실행 중인 웹 서비스에서 메타데이터 다운로드를 지원하지 않습니다. 개발자는 svcutil과 같은 지원되는 다른 웹 서비스 도구를 사용하여 로컬 컴퓨터에 메타데이터를 다운로드하고, 저장된 파일을 검사하고, 컴파일을 위해 해당 파일을 wsutil.exe 전달할 수 있습니다.

여러 입력/출력 파일 지원

WSDL 및 XML 스키마를 사용하면 다른 위치/파일에 지정된 다른 이름 공간에서 정의를 포함/가져올 수 있습니다. Wsutil은 여러 스키마/wsdl/policy 입력을 지원하고 각 입력 파일에 대해 하나의 스텁/헤더 집합을 생성합니다. Wsutil은 include 및 import 문을 따르지 않습니다. 대신 애플리케이션은 도구가 컴파일 중에 모든 종속성을 resolve 수 있도록 필요한 모든 네임스페이스가 포함된 파일을 wsutil에 전달해야 합니다.

WsUtil.exe /xsd:stockquote.xsd /wsdl:stockquote.wsdl /wsdl:stockquoteservice.wsdl

wsutil은 다음과 같은 세 가지 출력 파일 집합을 생성합니다.

  • stockquote.xsd.c stockquote.xsd.h
  • stockquote.wsdl.c stockquote.wsdl.h
  • stockquoteservice.wsdl.h stockquoteservices.wsdl.c

출력 파일 형식

각 출력 파일에 대해 wsutil은 헤더 파일에서 외부에서 사용할 수 있는 정의를 생성합니다. C 구조 정의 및 스텁 함수 프로토타입 이외에 다른 모든 웹 서비스 관련 정의는 정규화된 파일 이름으로 명명된 전역 구조에 캡슐화됩니다.

typedef struct _stockquote_wsdl {
  struct {
  ... // list of WS_STRUCT_DESCRIPTION for all global complex types.
  } globalTypes;
  struct {
  ... // WS_ELEMENT_DESCRIPTION for all global elements.
  } globalElements;
  struct {
  ...
  } messages;
  struct {
  ...
  } contracts;
} _stockquote_wsdl;

EXTERN_C _stockquote_wsdl stockquote_wsdl;

전역 구조에 대해 모든 필드가 생성되지는 않습니다. 최상위 필드는 관련 정의가 입력 파일에 지정된 경우에만 생성됩니다. 예를 들어 xsd 파일에 대해 메시지, 작업 및 계약 필드가 생성되지 않습니다.

경고 수준 및 오류 수준

C 컴파일러와 마찬가지로 WsUtil.exe 4개의 경고 수준과 하나의 오류 수준을 지원합니다.

  • WsUtil.exe 잘못된 wsdl 파일, 잘못된 컴파일러 옵션 등 복구할 수 없는 오류와 함께 오류를 생성합니다.
  • WsUtil은 심각한 복구 가능한 문제로 W1 경고를 생성합니다. 컴파일러는 계속 진행할 수 있지만 사용자는 이 문제를 알고 있어야 합니다. 예를 들어 일부 WSDL 패싯과 같이 코드 생성에 영향을 주지 않는 지원되지 않는 특성이 wsdl에 있는 경우 W1 경고가 생성됩니다.
  • WsUtil은 덜 심각한 문제가 있는 W2 경고를 생성합니다. 기능 손실은 없지만 애플리케이션 개발자는 이를 알고 싶을 수 있습니다. 다른 플랫폼과 다를 수 있는 동작과 비슷합니다.
  • WsUtil은 생성된 코드에 미치는 영향을 최소화하면서 W3 경고를 생성합니다. 예를 들어 정규화된 문자열이 원래 문자열과 다른 경우 wsutil.exe W3 경고를 생성합니다.
  • W4 경고는 "정보 제공" 경고와 비슷하며 WSDL에서 설명서 특성을 무시하는 경우 WsUtil 문제 W4가 발생합니다.
  • WX는 컴파일러가 경고를 오류로 처리했음을 나타냅니다. 예를 들어 /W:1 /WX가 지정된 경우 wsutil은 모든 W1 경고에 대한 오류를 생성합니다.

/W:{N}은 생성해야 하는 경고 메시지 수준을 지정합니다. /W:1은 경고 수준 1 경고가 생성되어야 하며, 경고 수준 2 이하의 경고는 마스킹되어야 하며 도구에서 생성되지 않아야 합니다.

/Fullname

이 옵션은 WsUtil.exe 잠재적인 이름 충돌을 방지하기 위해 식별자에 대한 전체 이름을 생성한다는 것을 나타냅니다. 예를 들어 example.xsd에는 다음이 있습니다.

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://Example.org" 
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" targetNamespace="http://Example.org" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
 <wsdl:types>
  <xs:element name="SimpleStruct">
   <xs:complexType>
    <xs:sequence>
     <xs:element name="a" type="xs:int" />
     <xs:element name="b" type="xs:int" />
    </xs:sequence>
   </xs:complexType>
  </xs:element>
 </wsdl:types>
</wsdl:definitions>

기본적으로 WsUtil.exe 다음을 생성합니다.

typedef struct SimpleStruct {
  int a;
  int b;
};

그러나 /fullname 명령줄 옵션을 지정하면 WsUtil.exe 대신 다음 구조 정의를 생성합니다.

typedef struct exmaple_xsd_SimpleStruct {
  int a;
  int b;
};

전역화

도구는 언어 중립적이며 다른 언어로 지역화할 수 있습니다. 모든 오류 메시지/콘솔 출력을 지역화할 수 있습니다. 그러나 명령줄 옵션은 영어로 유지합니다.

환경 변수

WsUtil.exe 환경 변수를 사용하지 않습니다.

플랫폼 독립적

WsUtil.exe 출력 파일은 플랫폼에 독립적입니다. 스텁에 생성된 아키텍처 종속 코드가 없습니다. 특정 아키텍처는 C 컴파일러에서 처리합니다. 스텁은 지원하는 모든 플랫폼에서 사용할 수 있습니다.

wsutil.exe 출력에 대한 설명은 WSDL 지원스키마 지원 파트에서 찾을 수 있습니다.