ServiceModel Metadata 유틸리티 도구(Svcutil.exe)ServiceModel Metadata Utility Tool (Svcutil.exe)

ServiceModel Metadata 유틸리티 도구는 메타 데이터 문서에서 서비스 모델 코드를 생성 하 고 서비스 모델 코드에서 메타 데이터 문서를 생성 하는 데 사용 됩니다.The ServiceModel Metadata Utility tool is used to generate service model code from metadata documents, and metadata documents from service model code.

SvcUtil.exeSvcUtil.exe

ServiceModel Metadata 유틸리티 도구는 Windows SDK 설치 위치, 특히 %ProgramFiles%\Microsoft SDKs\Windows\v6.0\Bin에서 찾을 수 있습니다.The ServiceModel Metadata Utility Tool can be found at the Windows SDK installation location, specifically %ProgramFiles%\Microsoft SDKs\Windows\v6.0\Bin.

기능Functionalities

다음 표에는이 도구에서 제공 하는 다양 한 기능과 사용 방법에 대해 설명 하는 해당 항목이 요약 되어 있습니다.The following table summarizes the various functionalities provided by this tool, and the corresponding topic that discusses how it is used:

작업Task 항목Topic
실행 중인 서비스나 정적 메타데이터 문서에서 코드를 생성합니다.Generates code from running services or static metadata documents. 서비스 메타데이터에서 WCF 클라이언트 생성Generating a WCF Client from Service Metadata
컴파일된 코드에서 메타데이터 문서를 내보냅니다.Exports metadata documents from compiled code. 방법: Svcutil.exe를 사용하여 컴파일된 서비스 코드에서 메타데이터 내보내How to: Use Svcutil.exe to Export Metadata from Compiled Service Code
컴파일된 서비스 코드의 유효성을 검사합니다.Validates compiled service code. 방법: Svcutil.exe를 사용하여 컴파일된 서비스 코드 유효성 검사How to: Use Svcutil.exe to Validate Compiled Service Code
실행 중인 서비스에서 메타데이터 문서를 다운로드합니다.Downloads metadata documents from running services. 방법: Svcutil.exe를 사용하여 메타데이터 문서 다운로드How to: Use Svcutil.exe to Download Metadata Documents
serialization 코드를 생성합니다.Generates serialization code. 방법: XmlSerializer를 사용하여 WCF 클라이언트 애플리케이션의 시작 시간 개선How to: Improve the Startup Time of WCF Client Applications using the XmlSerializer

주의

Svcutil.exe는 매개 변수로 제공 된 이름이 동일한 경우 디스크에 있는 기존 파일을 덮어씁니다.Svcutil overwrites existing files on a disk if the names supplied as parameters are identical. 여기에는 코드 파일, 구성 또는 메타 데이터 파일이 포함 될 수 있습니다.This can include code files, configuration, or metadata files. 코드 및 구성 파일을 생성할 때이 문제를 방지 하려면 /mergeConfig 스위치를 사용 합니다.To avoid this when generating code and configuration files, use the /mergeConfig switch.

또한 참조 형식에 대 한 /r/ct 스위치는 데이터 계약을 생성 하기 위한 것입니다.In addition, the /r and /ct switches for referencing types are for generating data contracts. 이러한 스위치는 XmlSerializer를 사용하는 경우 작동하지 않습니다.These switches do not work when using XmlSerializer.

제한 시간Timeout

이 도구는 메타 데이터를 검색할 때 5 분의 시간 제한이 있습니다.The tool has a five minute timeout when retrieving metadata. 이 시간 제한은 네트워크를 통해 메타데이터를 검색하는 경우에만 적용됩니다.This timeout only applies to retrieving metadata over the network. 해당 메타데이터를 처리하는 경우에는 적용되지 않습니다.It does not apply to any processing of that metadata.

멀티 타기팅Multi-targeting

이 도구는 멀티 타기팅을 지원하지 않습니다.The tool does not support multi-targeting. Svcutil.exe에서 .net 4 아티팩트를 생성 하려면 .NET 4 SDK에서 svcutil.exe 를 사용 합니다.If you want to generate a .NET 4 artifact from svcutil.exe, use the svcutil.exe from the .NET 4 SDK. .NET 3.5 아티팩트를 생성하려면 .NET 3.5 SDK에서 실행 파일을 사용합니다.To generate a .NET 3.5 artifact, use the executable from the .NET 3.5 SDK.

WSDL 문서 액세스Accessing WSDL Documents

Svcutil을 사용하여 STS(보안 토큰 서비스)에 대한 참조가 있는 WSDL 문서에 액세스하는 경우 Svcutil은 STS에 대해 WS-MetadataExchange 호출을 수행합니다.When you use Svcutil to access a WSDL document that has a reference to a security token service (STS), Svcutil makes a WS-MetadataExchange call to the STS. 그러나 서비스는 WS-MetadataExchange 또는 HTTP GET을 사용하여 해당 서비스의 WSDL 문서를 노출할 수 있습니다.However, the service can expose its WSDL documents using either WS-MetadataExchange or HTTP GET. 따라서 STS가 HTTP GET을 사용 하 여 WSDL 문서만 노출 하는 경우 WinFX로 작성 된 클라이언트는 실패 합니다.Therefore, if the STS has only exposed the WSDL document using HTTP GET, a client written in WinFX will fail. @No__t_0로 작성 된 클라이언트의 경우 Svcutil.exe는 Ws-metadataexchange 및 HTTP GET을 모두 사용 하 여 STS WSDL을 가져옵니다.For clients written in .NET Framework 3.5.NET Framework 3.5, Svcutil attempts to use both WS-MetadataExchange and HTTP GET to obtain the STS WSDL.

SvcUtil.exe 사용Using SvcUtil.exe

일반적인 사용Common Usages

다음 표에서는이 도구에 일반적으로 사용 되는 옵션을 보여 줍니다.The following table shows some commonly used options for this tool:

옵션Option 설명Description
/디렉터리: <directory >/directory:<directory> 파일을 만들 디렉터리입니다.Directory to create files in.

기본값: 현재 디렉터리Default: The current directory.

약식: /dShort form: /d
/help/help 이 도구의 명령 구문 및 옵션을 표시합니다.Displays the command syntax and options for the tool.

약식: /?Short form: /?
/noLogo/noLogo 저작권 및 배너 메시지를 표시하지 않습니다.Suppress the copyright and banner message.
/svcutilConfig: <configFile >/svcutilConfig:<configFile> App.config 파일 대신 사용할 사용자 지정 구성 파일을 지정합니다.Specifies a custom configuration file to use instead of the App.config file. 이 옵션은 도구의 구성 파일을 바꾸지 않고 system.serviceModel 확장을 등록하는 데 사용될 수 있습니다.This can be used to register system.serviceModel extensions without altering the tool's configuration file.
/target: <output 형식 >/target:<output type> 도구에서 생성할 출력을 지정합니다.Specifies the output to be generated by the tool.

유효한 값은 코드, 메타데이터 또는 xmlSerializer입니다.Valid values are code, metadata or xmlSerializer.

약식: /tShort form: /t

코드 생성Code Generation

Svcutil.exe를 사용하여 메타데이터 문서에서 서비스 계약, 클라이언트 및 데이터 형식에 대한 코드를 생성할 수 있습니다.Svcutil.exe can generate code for service contracts, clients and data types from metadata documents. 이러한 메타데이터 문서는 지속적인 스토리지에 있거나 온라인으로 검색할 수 있습니다.These metadata documents can be on a durable storage, or be retrieved online. 온라인 검색은 WS-Metadata Exchange 프로토콜이나 DISCO 프로토콜을 따릅니다. 자세한 내용은 메타데이터 다운로드 단원을 참조하십시오.Online retrieval follows either the WS-Metadata Exchange protocol or the DISCO protocol (for details see the Metadata Download section).

Svcutil.exe 도구를 사용 하 여 미리 정의 된 WSDL 문서를 기반으로 서비스 및 데이터 계약을 생성할 수 있습니다.You can use the SvcUtil.exe tool to generate service and data contracts based on a predefined WSDL document. /serviceContract 스위치를 사용하고 WSDL 문서를 다운로드하거나 찾을 수 있는 URL 또는 파일 위치를 지정합니다.Use the /serviceContract switch and specify a URL or file location where the WSDL document can be downloaded or found. 그러면 규격 서비스를 구현 하는 데 사용할 수 있는 WSDL 문서에 정의 된 서비스 및 데이터 계약을 생성 합니다.This generates the service and data contracts defined in the WSDL document that can then be used to implement a complaint service. 자세한 내용은 방법: 메타 데이터 검색 및 규격 서비스 구현을 참조 하세요.For more information, see How to: Retrieve Metadata and Implement a Compliant Service.

BasicHttpContextBinding 끝점을 사용 하는 서비스의 경우 svcutil.exeallowCookies 특성이 true로 설정 된 BasicHttpBinding을 생성 합니다.For a service with a BasicHttpContextBinding endpoint, Svcutil.exe generates a BasicHttpBinding with the allowCookies attribute set to true instead. 서버의 컨텍스트에 쿠키가 사용됩니다.The cookies are used for context on the server. 서비스가 쿠키를 사용할 때 클라이언트에서 컨텍스트를 관리하려면 컨텍스트 바인딩을 사용하도록 구성을 수동으로 수정할 수 있습니다.If you would like to manage context on the client when the service uses cookies, you can manually modify the configuration to use a context binding.

주의

Svcutil.exe는 WSDL을 기반으로 하는 클라이언트 또는 서비스에서 받은 정책 파일을 생성합니다.Svcutil.exe generates the client based on the WSDL or policy file received from the service. UPN (사용자 계정 이름)은 사용자 이름, "@" 및 FQDN (정규화 된 도메인 이름)을 연결 하 여 생성 됩니다.The user principal name (UPN) is generated by concatenating username, "@" and a fully-qualified domain name (FQDN). 그러나 Active Directory에 등록한 사용자의 경우에는 이 형식은 유효하지 않으며 도구에서 생성한 UPN으로 인해 "로그온하지 못했습니다."라는 오류 메시지와 함께 Kerberos 인증 오류가 발생합니다.However, for users who registered on Active Directory, this format is not valid and the UPN generated by the tool causes a failure in Kerberos authentication with the error message "The logon attempt failed". 이 문제를 해결하려면 이 도구에서 생성한 클라이언트 파일을 수동으로 수정해야 합니다.To resolve this problem, you should manually fix the client file generated by this tool.

svcutil.exe [/t:code] <metadataDocumentPath>* | <url>* | <epr>

인수Argument 설명Description
epr WS-Metadata Exchange를 지원하는 서비스 엔드포인트에 대한 WS-Addressing EndpointReference가 포함된 XML 파일의 경로입니다.The path to an XML file that contains a WS-Addressing EndpointReference for a service endpoint that supports WS-Metadata Exchange. 자세한 내용은 메타데이터 다운로드 단원을 참조하십시오.For more information, see the Metadata Download section.
metadataDocumentPath 코드 (.wsdl, .xsd, wspolicy 또는 wsmex)로 가져올 계약을 포함 하는 메타 데이터 문서 (wsdl 또는 xsd)의 경로입니다.The path to a metadata document (wsdl or xsd) that contains the contract to import into code (.wsdl, .xsd, .wspolicy, or .wsmex).

Svcutil은 메타데이터의 원격 URL을 지정하는 경우 import 및 include를 따릅니다.Svcutil follows imports and includes when you specify a remote URL for metadata. 그러나 로컬 파일 시스템의 메타데이터 파일을 처리하려면 이 인수로 모든 파일을 지정해야 합니다.However, if you want to process metadata files on the local file system, you must specify all files in this argument. 이러한 방식으로 네트워크 종속성을 사용할 수 없는 빌드 환경에서 Svcutil을 사용할 수 있습니다.In this way, you can use Svcutil in a build environment where you cannot have network dependencies. 이 인수에는 와일드 카드 (* .xsd, * .wsdl)를 사용할 수 있습니다.You can use wildcards (*.xsd, *.wsdl) for this argument.
url 메타데이터를 제공하는 서비스 엔드포인트의 URL 또는 온라인으로 호스팅되는 메타데이터 문서의 URL입니다.The URL to a service endpoint that provides metadata or to a metadata document hosted online. 이러한 문서를 검색하는 방법에 대한 자세한 내용은 메타데이터 다운로드 단원을 참조하십시오.For more information on how these documents are retrieved, see the Metadata Download section.
옵션Option 설명Description
/async/async 동기 및 비동기 메서드 서명을 모두 생성합니다.Generates both synchronous and asynchronous method signatures.

기본값: 동기 메서드 서명만 생성합니다Default: generate only synchronous method signatures.

약식: /aShort Form: /a
/collectionType: <type >/collectionType:<type> WCF 클라이언트에 대한 목록 컬렉션 형식을 지정합니다.Specifies the list collection type for a WCF client.

기본값: 컬렉션 형식은 System.object입니다.Default: collection type is System.Array.

약식: /ctShort Form: /ct
/config: <configFile >/config:<configFile> 생성된 구성 파일의 파일 이름을 지정합니다.Specifies the filename for the generated configuration file.

기본값: output.configDefault: output.config
/dataContractOnly/dataContractOnly 데이터 계약 형식에 대한 코드만 생성합니다.Generates code for data contract types only. 서비스 계약 형식은 생성되지 않습니다.Service Contract types are not generated.

이 옵션에 대한 로컬 메타데이터 파일만 지정해야 합니다.You should only specify local metadata files for this option.

약식: /dconlyShort Form: /dconly
/enableDataBinding/enableDataBinding 모든 데이터 계약 형식에 INotifyPropertyChanged 인터페이스를 구현하여 데이터 바인딩을 사용할 수 있습니다.Implements the INotifyPropertyChanged interface on all Data Contract types to enable data binding.

약식: /edbShort Form: /edb
/excludeType: <type >/excludeType:<type> 참조된 계약 형식에서 제외할 정규화된 형식 이름 또는 정규화된 어셈블리 형식 이름을 지정합니다.Specifies a fully-qualified or assembly-qualified type name to be excluded from referenced contract types.

별도의 DLL에서 /r과 함께 이 스위치를 사용하는 경우 XSD 클래스의 전체 이름이 참조됩니다.When using this switch together with /r from separate DLLs, the full name of the XSD class is referenced.

약식: /etShort Form: /et
/importXmlTypes/importXmlTypes 비데이터 계약 형식을 IXmlSerializable 형식으로 가져오도록 데이터 계약 serializer를 구성합니다.Configures the Data Contract serializer to import non-Data Contract types as IXmlSerializable types.
/internal/internal internal로 표시된 클래스를 생성합니다.Generates classes that are marked as internal. 기본값: 공용 클래스만 생성합니다.Default: generate public classes only.

약식: /iShort Form: /i
/language: <language >/language:<language> 코드 생성에 사용할 프로그래밍 언어를 지정합니다.Specifies the programming language to use for code generation. Machine.config 파일에 등록 된 언어 이름 또는 CodeDomProvider에서 상속 되는 클래스의 정규화 된 이름을 제공 해야 합니다.You should provide either a language name registered in the Machine.config file, or the fully qualified name of a class that inherits from CodeDomProvider.

값: c#, cs, csharp, vb, visualbasic, c++, cppValues: c#, cs, csharp, vb, visualbasic, c++, cpp

기본값: csharpDefault: csharp

약식: /lShort form: /l
/mergeConfig/mergeConfig 기존 파일을 덮어쓰는 대신 생성된 구성을 기존 파일에 병합합니다.Merges the generated configuration into an existing file, instead of overwriting the existing file.
/messageContract/messageContract 메시지 계약 형식을 생성합니다.Generates Message Contract types.

약식: /mcShort Form: /mc
/namespace: <string, 문자열 >/namespace:<string,string> WSDL 또는 XML 스키마 targetNamespace에서 CLR 네임스페이스로의 매핑을 지정합니다.Specifies a mapping from a WSDL or XML Schema targetNamespace to a CLR namespace. TargetNamespace에 ' * '를 사용 하면 해당 CLR 네임 스페이스에 명시적으로 매핑하지 않고 모든 targetNamespaces가 매핑됩니다.Using '*' for the targetNamespace maps all targetNamespaces without an explicit mapping to that CLR namespace.

메시지 계약 이름이 작업 이름과 충돌하지 않도록 하려면 ::을 사용하여 형식 참조를 한정하거나 이름이 고유한지 확인해야 합니다.To make sure that the message contract name does not collide with operation name, you should either qualify the type reference with ::, or make sure the names are unique.

기본값: 데이터 계약에 대한 스키마 문서의 대상 네임스페이스에서 파생됩니다.Default: Derived from the target namespace of the schema document for Data Contracts. 기본 네임스페이스는 생성된 다른 모든 형식에 사용됩니다.The default namespace is used for all other generated types.

약식: /n 참고: XmlSerializer에서 사용할 형식을 생성할 때 단일 네임 스페이스 매핑만 지원 됩니다.Short Form: /n Note: When generating types to use with XmlSerializer, only a single namespace mapping is supported. 생성 되는 모든 형식은 기본 네임 스페이스 또는 ' * '로 지정 된 네임 스페이스에 있습니다.All generated types will either be in the default namespace or the namespace specified by '*'.
/noConfig/noConfig 구성 파일을 생성하지 않습니다.Do not generate configuration files.
/noStdLib/noStdLib 표준 라이브러리를 참조하지 않습니다.Do not reference standard libraries.

기본값: Mscorlib.dll 및 System.servicemodel.dll이 참조됩니다.Default: Mscorlib.dll and System.servicemodel.dll are referenced.
/out: <file >/out:<file> 생성된 코드에 대한 파일 이름을 지정합니다.Specifies the file name for the generated code.

기본값: WSDL 정의 이름, WSDL 서비스 이름 또는 스키마 중 하나의 대상 네임스페이스에서 파생됩니다.Default: Derived from the WSDL definition name, WSDL service name or target namespace of one of the schemas.

약식: /oShort form: /o
/reference: <file 경로 >/reference:<file path> 지정한 어셈블리에서 형식을 참조합니다.References types in the specified assembly. 클라이언트를 생성할 때 이 옵션을 사용하여 가져오는 메타데이터를 나타내는 형식이 포함될 수 있는 어셈블리를 지정합니다.When generating clients, use this option to specify assemblies that might contain types that represent the metadata being imported.

이 스위치를 사용하여 메시지 계약 및 XmlSerializer 형식을 지정할 수 없습니다.You cannot specify message contracts and XmlSerializer types using this switch.

DateTimeOffset을 참조하는 경우 새 형식을 생성하는 대신 이 형식을 사용합니다.If DateTimeOffset referenced, this type is used instead of generating a new type. .NET Framework 3.5.NET Framework 3.5를 사용하여 애플리케이션이 작성되는 경우 SvcUtil.exe는 DateTimeOffset을 자동으로 참조합니다.If the application is written using .NET Framework 3.5.NET Framework 3.5, SvcUtil.exe references DateTimeOffset automatically.

약식: /rShort Form: /r
/serializable/serializable Serializable 특성으로 표시된 클래스를 생성합니다.Generates classes marked with the Serializable Attribute.

약식: /sShort Form: /s
/serviceContract/serviceContract 서비스 계약에만 해당하는 코드를 생성합니다.Generate code for service contracts only. 클라이언트 클래스 및 구성이 생성되지 않습니다.Client class and configuration will not be generated

약식: /scShort Form: /sc
/serializer:Auto/serializer:Auto Serializer를 자동으로 선택 합니다.Automatically select the serializer. 이는 데이터 계약 serializer를 사용 하려고 시도 하 고, 실패할 경우 XmlSerializer를 사용 합니다.This tries to use the Data Contract serializer and uses the XmlSerializer if that fails.

약식: /serShort Form: /ser
/serializer:DataContractSerializer/serializer:DataContractSerializer serialization 및 deserialization을 위해 데이터 계약 Serializer를 사용하는 데이터 형식을 생성합니다.Generates data types that use the Data Contract Serializer for serialization and deserialization.

약식: /ser:DataContractSerializerShort Form: /ser:DataContractSerializer
/serializer:XmlSerializer/serializer:XmlSerializer serialization 및 deserialization을 위해 XmlSerializer를 사용하는 데이터 형식을 생성합니다.Generates data types that use the XmlSerializer for serialization and deserialization.

약식: /ser:XmlSerializerShort Form: /ser:XmlSerializer
/targetClientVersion/targetClientVersion 응용 프로그램을 대상으로 하는 .NET Framework 버전을 지정 합니다.Specify which version of .NET Framework the application is targeting. 유효한 값은 Version30Version35입니다.Valid values are Version30 and Version35. 기본값은 Version30여야 합니다.The default value is Version30.

약식: /tcvShort Form: /tcv

Version30: WinFX를 사용 하는 클라이언트에 대 한 코드를 생성 하는 경우 /tcv:Version30를 사용 합니다.Version30: Use /tcv:Version30 if you are generating code for clients that use WinFX.

Version35: /tcv:Version35를 사용하는 클라이언트에 대한 코드를 생성하는 경우 .NET Framework 3.5.NET Framework 3.5를 사용합니다.Version35: Use /tcv:Version35 if you are generating code for clients that use .NET Framework 3.5.NET Framework 3.5. /tcv:Version35 스위치와 함께 /async를 사용하면 이벤트 기반 메서드 및 콜백/대리자 기반 비동기 메서드가 모두 생성됩니다.When using /tcv:Version35 with the /async switch, both event-based and callback/delegate-based asynchronous methods are generated. 또한 LINQ 사용 DataSet 및 DateTimeOffset을 지원하도록 설정되어 있습니다.In addition, support for LINQ-enabled DataSets and DateTimeOffset is enabled.
/wrapped/wrapped 래핑된 매개 변수가 있는 문서 리터럴 스타일 문서에 특수 대/소문자가 사용되는지 여부를 제어합니다.Controls whether special-casing is used for document-literal styled documents with wrapped parameters. 서비스 모델 메타 데이터 유틸리티 도구 (svcutil.exe) 도구를 사용 하 여 /래핑된 스위치를 사용 하 여 일반 대/소문자를 지정 합니다.Use the /wrapped switch with the Service Model Metadata Utility Tool (Svcutil.exe) tool to specify normal casing.

참고

서비스 바인딩이 시스템 제공 바인딩 중 하나 ( 시스템 제공 바인딩참조)이 고 ProtectionLevel 속성이 None 또는 Sign으로 설정 된 경우 svcutil.exe는 <customBinding를 사용 하 여 구성 파일을 생성 > 필요한 시스템 제공 요소 대신 요소입니다.When the service binding is one of the system-provided bindings (see System-Provided Bindings), and the ProtectionLevel property is set to either None or Sign, Svcutil generates a configuration file using the <customBinding> element instead of the expected system-provided element. 예를 들어 서비스에서 <wsHttpBinding>ProtectionLevel으로 설정된 Sign 요소를 사용하는 경우 생성된 구성의 바인딩 섹션에는 <customBinding> 대신 <wsHttpBinding>이 있습니다.For example, if the service uses the <wsHttpBinding> element with the ProtectionLevel set to Sign, the generated configuration has <customBinding> in the bindings section instead of <wsHttpBinding>. 보호 수준에 대 한 자세한 내용은 보호 수준 이해를 참조 하세요.For more information about the protection level, see Understanding Protection Level.

메타데이터 내보내기Metadata Export

Svcutil.exe에서는 컴파일된 어셈블리에 있는 서비스, 계약 및 데이터 형식에 대한 메타데이터를 내보낼 수 있습니다.Svcutil.exe can export metadata for services, contracts and data types in compiled assemblies. 서비스에 대한 메타데이터를 내보내려면 /serviceName 옵션을 사용하여 내보낼 서비스를 지정해야 합니다.To export metadata for a service, you must use the /serviceName option to specify the service you would like to export. 어셈블리 내의 모든 데이터 계약 형식을 내보내려면 /dataContractOnly 옵션을 사용해야 합니다.To export all data contract types within an assembly, you should use the /dataContractOnly option. 기본적으로 입력 어셈블리에 있는 모든 서비스 계약에 대한 메타데이터가 내보내집니다.By default, metadata is exported for all service contracts in the input assemblies.

svcutil.exe [/t:metadata] [/serviceName:<serviceConfigName>] [/dataContractOnly] <assemblyPath>*

인수Argument 설명Description
assemblyPath 내보낼 서비스, 계약 또는 데이터 계약 형식이 포함된 어셈블리의 경로를 지정합니다.Specifies the path to an assembly that contains services, contracts or data contract types to be exported. 여러 파일을 입력으로 제공하려면 표준 명령줄 와일드카드를 사용할 수 있습니다.Standard command line wildcards can be used to provide multiple files as input.
옵션Option 설명Description
/serviceName: <serviceConfigName >/serviceName:<serviceConfigName> 내보낼 서비스의 구성 이름을 지정합니다.Specifies the configuration name of a service to be exported. 이 옵션을 사용할 경우 연결된 구성 파일이 있는 실행 가능한 어셈블리를 입력으로 전달해야 합니다.If this option is used, an executable assembly with an associated configuration file must be passed as input. Svcutil.exe는 서비스 구성에 대한 연결된 모든 구성 파일을 검색합니다.Svcutil.exe searches all associated configuration files for the service configuration. 구성 파일에 확장명 형식이 있는 경우 이러한 형식을 포함하는 어셈블리는 GAC에 있거나 /reference 옵션을 사용하여 명시적으로 제공되어야 합니다.If the configuration files contain any extension types, the assemblies that contain these types must either be in the GAC or explicitly provided using the /reference option.
/reference: <file 경로 >/reference:<file path> 형식 참조를 확인하는 데 사용되는 어셈블리 집합에 지정된 어셈블리를 추가합니다.Adds the specified assembly to the set of assemblies used for resolving type references. 구성에 등록된 타사 확장명(Behaviors, Bindings 및 BindingElements)을 사용하는 서비스를 내보내거나 유효성을 검사하는 경우 이 옵션을 사용하여 GAC에 없는 확장명 어셈블리를 찾으십시오.If you are exporting or validating a service that uses 3rd-party extensions (Behaviors, Bindings and BindingElements) registered in configuration, use this option to locate extension assemblies that are not in the GAC.

약식: /rShort Form: /r
/dataContractOnly/dataContractOnly 데이터 계약 형식에 대해서만 작동합니다.Operates on data contract types only. 서비스 계약은 처리되지 않습니다.Service Contracts are not processed.

이 옵션에 대한 로컬 메타데이터 파일만 지정해야 합니다.You should only specify local metadata files for this option.

약식: /dconlyShort Form: /dconly
/excludeType: <type >/excludeType:<type> 내보내기에서 제외할 형식의 정규화된 이름 또는 정규화된 어셈블리 이름을 지정합니다.Specifies the fully-qualified or assembly-qualified name of a type to be excluded from export. 형식을 내보내기에서 제외하기 위해 서비스 또는 서비스 계약 집합에 대한 메타데이터를 내보내는 경우 이 옵션을 사용할 수 있습니다.This option can be used when exporting metadata for a service, or a set of service contracts to exclude types from being exported. 이 옵션은 /dconly 옵션과 함께 사용할 수 없습니다.This option cannot be used together with the /dconly option.

여러 서비스가 포함된 단일 어셈블리가 있고, 각 서비스에서 XSD 이름이 같은 별도의 클래스를 사용하는 경우 이 스위치에 XSD 클래스 이름 대신 서비스 이름을 지정해야 합니다.When you have a single assembly containing multiple services, and each uses separate classes with the same XSD name, you should specify the service name instead of the XSD class name for this switch.

XSD 또는 데이터 계약 형식은 지원되지 않습니다.XSD or data contract types are not supported.

약식: /etShort Form: /et

서비스 유효성 검사Service Validation

유효성 검사는 서비스를 호스트하지 않고 서비스 구현의 오류를 검색하는 데 사용될 수 있습니다.Validation can be used to detect errors in service implementations without hosting the service. 유효성을 검사할 서비스를 나타내려면 /serviceName 옵션을 사용해야 합니다.You must use the /serviceName option to indicate the service you want to validate.

svcutil.exe /validate /serviceName:<serviceConfigName> <assemblyPath>*

인수Argument 설명Description
assemblyPath 유효성을 검사할 서비스 형식이 포함된 어셈블리의 경로를 지정합니다.Specifies the path to an assembly that contains service types to be validated. 서비스 구성을 제공하려면 어셈블리에 연결된 구성 파일이 있어야 합니다.The assembly must have an associated configuration file to provide service configuration. 여러 어셈블리를 제공하는 데 표준 명령줄 와일드카드를 사용할 수 있습니다.Standard command-line wildcards can be used to provide multiple assemblies.
옵션Option 설명Description
/validate/validate /serviceName 옵션에 의해 지정된 서비스 구현의 유효성을 검사합니다.Validates a service implementation specified by the /serviceName option. 이 옵션을 사용할 경우 연결된 구성 파일이 있는 실행 가능한 어셈블리를 입력으로 전달해야 합니다.If this option is used, an executable assembly with an associated configuration file must be passed as input.

약식: /vShort Form: /v
/serviceName: <serviceConfigName >/serviceName:<serviceConfigName> 유효성을 검사할 서비스의 구성 이름을 지정합니다.Specifies the configuration name of a service to be validated. Svcutil.exe는 서비스 구성에 대한 모든 입력 어셈블리의 연결된 모든 구성 파일을 검색합니다.Svcutil.exe searches all associated configuration files of all input assemblies for the service configuration. 구성 파일에 확장명 형식이 있는 경우 이러한 형식을 포함하는 어셈블리는 GAC에 있거나 /reference 옵션을 사용하여 명시적으로 제공되어야 합니다.If the configuration files contain any extension types, the assemblies that contains these types must either be in the GAC or explicitly provided using the /reference option.
/reference: <file 경로 >/reference:<file path> 형식 참조를 확인하는 데 사용되는 어셈블리 집합에 지정된 어셈블리를 추가합니다.Adds the specified assembly to the set of assemblies used for resolving type references. 구성에 등록된 타사 확장명(Behaviors, Bindings 및 BindingElements)을 사용하는 서비스를 내보내거나 유효성을 검사하는 경우 이 옵션을 사용하여 GAC에 없는 확장명 어셈블리를 찾으십시오.If you are exporting or validating a service that uses 3rd-party extensions (Behaviors, Bindings and BindingElements) registered in configuration, use this option to locate extension assemblies that are not in the GAC.

약식: /rShort Form: /r
/dataContractOnly/dataContractOnly 데이터 계약 형식에 대해서만 작동합니다.Operates on data contract types only. 서비스 계약은 처리되지 않습니다.Service Contracts are not processed.

이 옵션에 대한 로컬 메타데이터 파일만 지정해야 합니다.You should only specify local metadata files for this option.

약식: /dconlyShort Form: /dconly
/excludeType: <type >/excludeType:<type> 유효성 검사에서 제외할 형식의 정규화된 이름 또는 정규화된 어셈블리 이름을 지정합니다.Specifies the fully-qualified or assembly-qualified name of a type to be excluded from validation.

약식: /etShort Form: /et

메타데이터 다운로드Metadata Download

Svcutil.exe를 사용하여 실행 중인 서비스에서 메타데이터를 다운로드하고 로컬 파일에 저장할 수 있습니다.Svcutil.exe can be used to download metadata from running services, and save the metadata to local files. 메타데이터를 다운로드하려면 /t:metadata 옵션을 지정해야 합니다.To download metadata, you must specify the /t:metadata option. 그렇지 않으면 클라이언트 코드가 생성됩니다.Otherwise, client code is generated. HTTP 및 HTTPS URL 스키마의 경우 Svcutil.exe에서는 WS-Metadata Exchange 및 DISCO를 사용하여 메타데이터를 검색하려고 시도합니다.For HTTP and HTTPS URL schemes, Svcutil.exe attempts to retrieve metadata using WS-Metadata Exchange and DISCO. 기타 모든 URL 스키마의 경우 Svcutil.exe에서 WS-Metadata Exchange만 사용합니다.For all other URL schemes, Svcutil.exe only uses WS-Metadata Exchange.

Svcutil은 다음 메타데이터 요청을 생성하고 동시에 메타데이터를 검색합니다.Svcutil issues the following metadata requests simultaneously to retrieve metadata.

  • 주어진 주소에 대한 MEX(WS-Transfer) 요청MEX (WS-Transfer) request to the supplied address

  • /mex가 추가된 주어진 주소에 대한 MEX 요청MEX request to the supplied address with /mex appended

  • 주어진 주소에 대한 DISCO 요청(ASMX에서 DiscoveryClientProtocol 사용)DISCO request (using the DiscoveryClientProtocol from ASMX) to the supplied address.

기본적으로 Svcutil.exe는 MetadataExchangeBindings 클래스에 정의된 바인딩을 사용하여 MEX 요청을 수행합니다.By default, Svcutil.exe uses the bindings defined in the MetadataExchangeBindings class to make MEX requests. WS-Metadata Exchange에 사용되는 바인딩을 구성하려면 IMetadataExchange 계약을 사용하는 구성에서 클라이언트 엔드포인트를 정의해야 합니다.To configure the binding used for WS-Metadata Exchange, you must define a client endpoint in configuration that uses the IMetadataExchange contract. 이 끝점은 Svcutil.exe의 구성 파일 또는 /svcutilConfig 옵션을 사용하여 지정한 다른 구성 파일에서 정의할 수 있습니다.This can be defined either in the configuration file of Svcutil.exe, or in another configuration file specified using the /svcutilConfig option.

svcutil.exe /t:metadata <url>* | <epr>

인수Argument 설명Description
url 메타데이터를 제공하는 서비스 엔드포인트의 URL 또는 온라인으로 호스팅되는 메타데이터 문서의 URL입니다.The URL to a service endpoint that provides metadata or to a metadata document hosted online.
epr WS-Metadata Exchange를 지원하는 서비스 엔드포인트에 대한 WS-Addressing EndpointReference가 포함된 XML 파일의 경로입니다.The path to an XML file that contains a WS-Addressing EndpointReference for a service endpoint that supports WS-Metadata Exchange.

XmlSerializer 형식 생성XmlSerializer Type Generation

XmlSerializer를 사용하여 serialize할 수 있는 데이터 형식을 사용하는 서비스 및 클라이언트 애플리케이션은 런타임에 해당 데이터 형식에 대한 serialization 코드를 생성하고 컴파일합니다. 이로 인해 시작 시 성능이 저하될 수 있습니다.Services and client applications that use data types that are serializable using the XmlSerializer generate and compile serialization code for those data types at runtime, which can result in slow start-up performance.

참고

미리 생성된 serialization 코드는 서비스가 아닌 클라이언트 애플리케이션에서만 사용할 수 있습니다.Pre-generated serialization code can only be used in client applications and not in services.

Svcutil.exe를 사용하면 애플리케이션에 대해 컴파일된 어셈블리에서 필요한 C# serialization 코드를 생성할 수 있으므로 이러한 애플리케이션의 시작 성능을 향상시킬 수 있습니다.Svcutil.exe can generate the necessary C# serialization code from the compiled assemblies for the application, thus improving start-up performance for these applications. 자세한 내용은 방법: XmlSerializer를 사용 하 여 WCF 클라이언트 응용 프로그램의 시작 시간 향상을 참조 하세요.For more information, see How to: Improve the Startup Time of WCF Client Applications using the XmlSerializer.

참고

Svcutil.exe는 입력 어셈블리에 있는 서비스 계약에서 사용하는 형식의 코드만 생성합니다.Svcutil.exe only generates code for types used by Service Contracts found in the input assemblies.

svcutil.exe /t:xmlSerializer <assemblyPath>*

인수Argument 설명Description
assemblyPath 서비스 계약 형식이 포함된 어셈블리의 경로를 지정합니다.Specifies the path to an assembly that contains service contract types. Serialization 형식이 각 계약의 모든 Xml Serializable 형식에 대해 생성됩니다.Serialization types are generated for all Xml Serializable types in each contract.
옵션Option 설명Description
/reference: <file 경로 >/reference:<file path> 형식 참조를 확인하는 데 사용되는 어셈블리 집합에 지정된 어셈블리를 추가합니다.Adds the specified assembly to the set of assemblies used for resolving type references.

약식: /rShort Form: /r
/excludeType: <type >/excludeType:<type> 내보내기 또는 유효성 검사에서 제외할 형식의 정규화된 이름 또는 정규화된 어셈블리 이름을 지정합니다.Specifies the fully-qualified or assembly-qualified name of a type to be excluded from export or validation.

약식: /etShort Form: /et
/out: <file >/out:<file> 생성된 코드에 대한 파일 이름을 지정합니다.Specifies the filename for the generated code. 이 옵션은 여러 어셈블리가 도구에 입력으로 전달되는 경우 무시됩니다.This option is ignored when multiple assemblies are passed as input to the tool.

기본값: 어셈블리 이름에서 파생됩니다.Default: Derived from the assembly name.

약식: /oShort Form: /o
/UseSerializerForFaults/UseSerializerForFaults 오류를 읽고 쓰는 데 기본 XmlSerializer 대신 DataContractSerializer를 사용하도록 지정합니다.Specifies that the XmlSerializer should be used for reading and writing faults, instead of the default DataContractSerializer.

예제Examples

다음 명령은 실행 중인 서비스나 온라인 메타데이터 문서에서 클라이언트 코드를 생성합니다.The following command generates client code from a running service or online metadata documents.

svcutil http://service/metadataEndpoint

다음 명령은 로컬 메타데이터 문서에서 클라이언트 코드를 생성합니다.The following command generates client code from local metadata documents.

svcutil *.wsdl *.xsd /language:C#

다음 명령은 로컬 스키마 문서에서 Visual Basic의 데이터 계약 형식을 생성합니다.The following command generates data contract types in Visual Basic from local schema documents.

svcutil /dconly *.xsd /language:VB

다음 명령은 실행 중인 서비스에서 메타데이터 문서를 다운로드합니다.The following command downloads metadata documents from running services.

svcutil /t:metadata http://service/metadataEndpoint

다음 명령은 서비스 계약의 메타데이터 문서 및 연결된 형식을 어셈블리에 생성합니다.The following command generates metadata documents for service contracts and associated types in an assembly.

svcutil myAssembly.dll

다음 명령은 서비스의 메타데이터 문서를 생성하고 연결된 모든 서비스 계약 및 데이터 형식을 어셈블리에 생성합니다.The following command generates metadata documents for a service, and all associated service contracts and data types in an assembly.

svcutil myServiceHost.exe /serviceName:myServiceName

다음 명령은 데이터 형식의 메타데이터 문서를 어셈블리에 생성합니다.The following command generates metadata documents for data types in an assembly.

svcutil myServiceHost.exe /dconly

다음 명령은 서비스 호스팅을 확인합니다.The following command verifies service hosting.

svcutil /validate /serviceName:myServiceName myServiceHost.exe

다음 명령은 어셈블리의 모든 서비스 계약이 사용하는 XmlSerializer 형식에 대해 serialization 형식을 생성합니다.The following command generates serialization types for XmlSerializer types used by any service contracts in the assembly.

svcutil /t:xmlserializer myContractLibrary.exe

최대 nametable 문자 수 할당량Maximum Nametable Character Count Quota

svcutil을 사용하여 서비스에 대해 메타데이터를 생성할 때는 다음 메시지가 나타날 수 있습니다.When using svcutil to generate metadata for a service, you may get the following message:

오류: XML 데이터를 읽는 동안 최대 nametable 문자 수 할당량 (16384)을 초과 하 http://localhost:8000/somesservice/mex에서 메타 데이터를 가져올 수 없습니다.Error: Cannot obtain Metadata from http://localhost:8000/somesservice/mex The maximum nametable character count quota (16384) has been exceeded while reading XML data. nametable은 XML 처리 도중에 발견된 문자열을 저장하는 데 사용되는 데이터 구조입니다. 반복되지 않는 요소 이름, 특성 이름 및 특성 값을 가지는 긴 XML 문서로 인해 이 할당량이 트리거될 수 있습니다.The nametable is a data structure used to store strings encountered during XML processing - long XML documents with non-repeating element names, attribute names and attribute values may trigger this quota. XML 판독기를 만들 때 사용되는 XmlDictionaryReaderQuotas 개체에서 MaxNameTableCharCount 속성을 변경하여 이 할당량을 늘릴 수 있습니다.This quota may be increased by changing the MaxNameTableCharCount property on the XmlDictionaryReaderQuotas object used when creating the XML reader.

이 오류는 큰 WSDL 파일의 메타데이터를 요청하면 해당 파일을 반환하는 서비스에서 발생할 수 있습니다.This error can be caused by a service that returns a large WSDL file when you request its metadata. svcutil.exe 도구에 대한 문자 할당량이 초과되어 문제가 발생합니다.The problem is that the character quota for the svcutil.exe tool is exceeded. 이 값은 서비스 거부(dos) 공격을 방지하기 위해 설정됩니다.This value is set to help prevent denial of service (dos) attacks. svcutil에 대해 다음 구성 파일을 지정하여 이 할당량을 늘릴 수 있습니다.You can increase this quota by specifying the following config file for svcutil.

다음 구성 파일에서는 svcutil에 대한 판독기 할당량을 설정하는 방법을 보여 줍니다.The following config file shows how to set the reader quotas for svcutil

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <customBinding>
                <binding name="MyBinding">
                    <textMessageEncoding>
                        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                    </textMessageEncoding>
                    <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
                </binding>
            </customBinding>
        </bindings>
        <client>
            <endpoint binding="customBinding" bindingConfiguration="MyBinding"
                contract="IMetadataExchange"
                name="http" />
        </client>
    </system.serviceModel>
</configuration>

svcutil.exe.config 파일을 새로 만들고 XML 예제 코드를 파일 안에 복사합니다.Create a new file called svcutil.exe.config and copy the XML example code into it. 그런 다음 이 파일을 svcutil.exe와 같은 디렉터리에 배치합니다.Then place the file in the same directory as svcutil.exe. 다음 번에 svcutil.exe를 실행하면 새 설정이 선택됩니다.The next time svcutil.exe is run it will pick up the new settings.

보안 고려 사항Security Concerns

적절한 ACL(액세스 제어 목록)을 사용하여 Svcutil.exe의 설치 폴더, Svcutil.config 및 /svcutilConfig에서 가리키는 파일을 보호해야 합니다.You should use the appropriate Access Control List (ACL) to protect Svcutil.exe's installation folder, Svcutil.config, and files being pointed to by /svcutilConfig. 이렇게 하면 악의적인 확장이 등록되어 실행되는 것을 방지할 수 있습니다.This can prevent malicious extensions from being registered and run.

또한 보안이 손상 될 가능성을 최소화 하려면 신뢰할 수 없는 확장을 시스템의 일부로 추가 하거나 Svcutil.exe를 사용 하 여 신뢰할 수 없는 코드 공급자를 사용 해야 합니다.In addition, to minimize the chance that security be compromised, you should not add untrusted extensions to be part of the system or use untrusted code providers with Svcutil.exe.

마지막으로 애플리케이션의 중간 계층에서 이 도구를 사용하면 현재 프로세스에 서비스 거부가 발생할 수 있으므로 사용하면 안 됩니다.Finally, you should not use the tool in the middle-tier of your application, as it may cause denial-of-service to the current process.

참조See also