如何从C#webservice生成WSDL文件

我已经创建了这样的WebService:

[WebService(Namespace = "http://ns")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class GroupManagerService : WebService { public GroupManagerService() { } [WebMethod] public bool MyMethod(string loginname, string country) { // code here... } } 

是否可以为此代码生成WSDL文件而无需连接到正在运行的服务? 我搜索并找到了有关SvcUtil.exewsdl.exe的信息,但这些信息仅在从正在运行的WebService检索WSDL时才起作用。

(对于java ,有一个名为java2wsdl的工具,是否有等效的c# ?)

:更新:
此问题的上下文是我要向SharePoint添加新的CustomWebService,它应该使用SharePoint上的_vti_bin文件夹中的WSPBuilder进行部署。 另请参阅我在SharePoint.SE上的post 。

我想自动生成(使用msbuild命令) ‘MyServicewsdl.aspx’‘MyServicedisco.wsdl’ ,它必须放在_vti_bin文件夹中。

也许我错过了一些东西? svcutil.exe的输出是:

 bin\Debug>SvcUtil.exe MyWebService.dll Microsoft (R) Service Model Metadata Tool [Microsoft (R) Windows (R) Communication Foundation, Version 3.0.4506.2152] Copyright (c) Microsoft Corporation. All rights reserved. Generating metadata files... Warning: No metadata files were generated. No service contracts were exported. To export a service, use the /serviceName option. To export data contracts, spe cify the /dataContractOnly option. This can sometimes occur in certain security contexts, such as when the assembly is loaded over a UNC network file share. If this is the case, try copying the assembly into a trusted environment and runnin g it. 

我创建了一个工具,可以从包含一个或多个WebServices的已编译c#assembly(dll)生成WSDL文件。 通常,您需要一个运行服务(IIS或其他)来托管.asmx,以便您可以使用/MyWebService.asmx?wsdl检索WSDL

此工具使用reflection生成WSDL文件以从程序集(dll)检索所有信息。

可以在https://github.com/StefH/WSDLGenerator找到下载

svcutil /?

  -= METADATA EXPORT =- Description: svcutil.exe can export metadata for services, contracts and data types in compiled assemblies. To export metadata for a service, you must use the /serviceName option to indicate the service you would like to export. To export all Data Contract types within an assembly use the /dataContractOnly option. By default metadata is exported for all Service Contracts in the input assemblies. Syntax: svcutil.exe [/t:metadata] [/serviceName:] [/dataContractOnly] *  - 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. Options: /serviceName: - The config name of a service to export. If this option is used, an executable assembly with an associated config file must be passed as input. Svcutil will search through all associated config files for the service configuration. If the config files contain any extension types, the assemblies containing these types must either be in the GAC or explicitly provided using the /r option. /reference: - Add the specified assembly to the set of assemblies used for resolving type references. If you are exporting or validating a service that uses 3rd-party extensions (Behaviors, Bindings and BindingElements) registered in config use this option to locate extension assemblies that are not in the GAC. (Short Form: /r) /dataContractOnly - Operate on Data Contract types only. Service Contracts will not be processed. (Short Form: /dconly) /excludeType: - The fully-qualified or assembly-qualified name of a type to exclude 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. This option cannot be used with the /dconly option. (Short Form: /et) 

Svcutil.exe肯定会在服务关闭的情况下生成WSDL。 正确的用法是svcutil your.executable.dll(exe)。 我正在使用它,所以我确信它会生成WSDL。