2010-02-26 84 views
15

我创建一个WebService这样的WSDL文件:如何生成从C#web服务

[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.exe & wsdl.exe,但是这些仅在从运行的WebService中检索WSDL时才起作用。

(对于的Java,有一个叫的Java2WSDL工具,是有C#等效?)



:更新:
的上下文这个问题是我想将新的CustomWebService添加到应该使用WSPBuilder在SharePoint上的_vti_bin文件夹中部署的SharePoint。 另请参阅SharePoint.SE上的my 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. 
+1

您正在使用.NET 2.0套牢找到?为什么要创建新的ASMX Web服务? – 2010-02-26 10:16:30

+0

查看已更新的问题文本... – 2010-02-26 11:28:22

+0

您必须使用ASMX服务登录页面的URL而不是程序集DLL来获取代理文件。 – vapcguy 2015-09-10 23:56:14

回答

15

我已经创建了一个工具,它可以从包含一个或多个WebServices的已编译的c#程序集(dll)生成WSDL文件。 通常您需要它承载的.asmx,这样就可以使用/MyWebService.asmx?wsdl

该工具使用反射来检索程序集的所有信息生成WSDL文件检索WSDL正在运行的服务(IIS或其他) (DLL)。

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

+1

WSDLGenerator是否也与WCF一起使用?我正在搜索[这个问题]的解决方案(http://stackoverflow.com/questions/11099335/bind-a-custom-wsdl-to-an-existing-wcf-service)。 – 2012-06-25 20:00:52

5

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) 
2

svcutil.exe的肯定会产生与服务下来WSDL。正确的用法是svcutil your.executable.dll(exe)。 我使用了很多,所以我确信它会生成WSDL。

+0

svcutil.exe显示错误“警告:没有生成元数据文件” – 2010-02-26 11:58:59