简体   繁体   English

如何从C#Web服务生成WSDL文件

[英]How to generate a WSDL file from a C# webservice

I've created a WebService like this: 我创建了这样的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...
    }
}

Is it possible to generate a WSDL file for this code without connecting to a running service? 是否可以在不连接到正在运行的服务的情况下为该代码生成WSDL文件? I searched and I found information about SvcUtil.exe & wsdl.exe , but these work only when retrieving the WSDL from a running WebService. 我搜索,我发现约svcutil.exe的 &Wsdl.exe用的信息,但这些工作中检索从运行WebService的WSDL只有当。

(For java , there is a tool called java2wsdl , is there a equivalent for c# ?) (对于Java ,有一个名为java2wsdl的工具,是否有c#的等效项?)



:Update: :更新:
The context for this question is that I want to add new CustomWebService to SharePoint which should deployed using WSPBuilder in the _vti_bin folder on SharePoint. 此问题的上下文是我要向SharePoint添加新的CustomWebService,应使用WSPBuilder在SharePoint的_vti_bin文件夹中进行部署。 See also my post on SharePoint.SE. 另请参阅在SharePoint.SE上的帖子

And I want to automatically generate (using msbuild commands) the 'MyServicewsdl.aspx' & 'MyServicedisco.wsdl' which must be placed in the _vti_bin folder. 我想自动生成(使用msbuild命令) “ MyServicewsdl.aspx”“ MyServicedisco.wsdl” ,该文件必须放在_vti_bin文件夹中。



Maybe I'm missing some things? 也许我缺少一些东西? Output from svcutil.exe is: 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.

I've created a tool which can generate a WSDL file from a compiled c# assembly (dll) which contains one or more WebServices. 我创建了一个工具,该工具可以从包含一个或多个WebServices的已编译c#程序集(dll)生成WSDL文件。 Normally you require a running service (IIS or other) which hosts the .asmx so that you can retrieve the WSDL using /MyWebService.asmx?wsdl 通常,您需要一个运行服务(IIS或其他),该服务承载.asmx,以便可以使用/MyWebService.asmx?wsdl检索WSDL。

This tool generate a WSDL file using reflection to retrieve all information from an assembly (dll). 此工具使用反射生成WSDL文件,以从程序集(dll)检索所有信息。

Download can be found at https://github.com/StefH/WSDLGenerator 可在https://github.com/StefH/WSDLGenerator中找到下载

See svcutil /? 看到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:<serviceConfigName>] [/dataContractOnly] <assemblyPath>*

 <assemblyPath> - 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:<serviceConfigName> - 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:<file path>           - 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:<type>              - 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 will definitely generate the WSDL with the service down. Svcutil.exe肯定会在服务关闭的情况下生成WSDL。 The correct usage is svcutil your.executable.dll(exe). 正确的用法是svcutil your.executable.dll(exe)。 I'm using this a lot so I'm sure it will generate the WSDL. 我经常使用它,因此我确定它将生成WSDL。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM