RESTful Web服务自动生成WADL

我在C#中创建了一个RESTful Web服务,并将其部署到IIS。 当我访问服务HeadOffice.svc时,我可以选择查看WSDL(HeadOffice.svc?wsdl)。 我想做的是可以选择查看WADL(例如HeadOffice.svc?wadl)。 这可能吗?

我已经阅读了一般意见认为这不是最佳做法的地方。 但是,我需要WADL作为学校作业,所以任何帮助都会非常感激。

假设您已经知道WADL不是标准/不广泛支持。 当有人需要WADL时,可能会更好地使用WS * / SOAP服务+ WSDL。 所以你的任务看起来很奇怪。

无论如何,在Microsoft的任何REST实现中都不支持“开箱即用”WADL,WCF 3.5 Rest Starter Kit,WCF 4 REST和ASP.NET WebAPI都不支持。

WADL for .NET没有可靠的工具。

当您的目标是使用WADL生成C#客户端代码时,请相信我,您将花费更多时间自己编写客户端代码。 并且有更好的解决方案。

你可以使用像HttpClient类或RestSharp这样的新类或类似的库来轻松地手动编写你的客户端,然后谷歌搜索可靠的WADL .NET解决方案

关于stackoverflow的类似问题: 使用WADL而不是WSDL在.NET中提供的Restful服务

更新 – Swagger:多年来, 招摇已经确立了自己的格式。 你可以在Swagger编辑器中使用swagger的YAML开始编写服务定义,或者使用Swashbuckle库为.NET生成来自现有服务的swagger。 第二个是我们使用WSDL的东西,并且swagger编辑器让你生成客户端和服务器样板。 无论您是生成服务器还是客户端,还是不喜欢它,swagger实际上是一种非常好的REST服务合同交换格式,不是理想的选择。

为何选择Swagger4Wcf

•手动为swagger编写yaml描述并维护它尤其是WCF服务很无聊。

•有一个名为Swagger4WCF的nuget包,它为wCF使用的每个接口匹配属性自动生成swagger 2.0的yaml描述( ServiceContract/OperationContract/WebGet/WebInvoke )。

2. Swagger如何在后台运作

Swagger4WCF使用NuPack post构建模式在构建时触发。

https://www.codeproject.com/Tips/1190360/How-to-setup-a-managed-postbuild-without-scripting

  1. 在构建时,它将检测输出目录中的程序集,使用mono.cecil打开它们(以反映程序集)以生成swagger 2.0的预期yaml描述。 Swagger4WCF检测WebGet / WebInvoke以在yaml中以序列化样式提供动词/方法。

在您的应用程序中实现Swagger的步骤:

  1. 安装SwaggerWcf包

  2. 配置WCF路由

我们必须在Global.asax中的Application_Start方法中添加路由

  protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.Add(new ServiceRoute("v1/rest", new WebServiceHostFactory(), typeof(BookStore))); RouteTable.Routes.Add(new ServiceRoute("api-docs", new WebServiceHostFactory(), typeof(SwaggerWcfEndpoint))); } 

注意:编辑Web.config并在system.serviceModel块中添加以下内容(如果它尚不存在)

   
  1. 配置WCF响应自动类型(可选)

我们必须将以下内容添加到Web.config中。 这将允许WCF服务接受请求并基于Content-Type标头发送回复。

             
  1. 装饰WCF服务接口对于每个方法,我们必须配置WebInvoke或WebGet属性,并添加SwaggerWcfPath属性。

    [SwaggerWcfPath("Get book", "Retrieve a book from the store using its id")] [WebGet(UriTemplate = "/books/{id}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] [OperationContract] Book ReadBook(string id);

  2. 装饰WCF服务类

•将SwaggerWcf和AspNetCompatibilityRequirements属性添加到提供服务基本路径的类中。

•对于每种方法,添加SwaggerWcfTag以对方法进行分类,并为服务的每个可能响应分类SWaggerWcfResponse。

 [SwaggerWcfTag("Books")] [SwaggerWcfResponse(HttpStatusCode.OK, "Book found, value in the response body")] [SwaggerWcfResponse(HttpStatusCode.NoContent, "No books", true)] public Book[] ReadBooks() { } 
  1. 装饰WCF服务中使用的数据类型

    [DataContract] [Description("Book with title, first publish date, author and language")] [SwaggerWcfDefinition(ExternalDocsUrl = "http://en.wikipedia.org/wiki/Book", ExternalDocsDescription = "Description of a book")]

     public class Book { [DataMember] [Description("Book ID")] public string Id { get; set; } [DataMember] [Description("Book Title")] public string Title { get; set; } [DataMember] [Description("Book First Publish Date")] public int FirstPublished { get; set; } [DataMember] [Description("Book Author")] public Author Author { get; set; } [DataMember] [Description("Book Language")] public Language Language { get; set; } } 

参考: – https://github.com/abelsilva/swaggerwcf

这就是Swagger实施的wcf。 如果您遇到任何问题,请免费。

谢谢,阿比