c# auto-generate wadl

c# - El servicio web RESTful genera automáticamente WADL



auto-generate (2)

Por qué Swagger4Wcf

• Escribir manualmente la descripción de yaml para cambiar y mantenerla, especialmente los servicios de WCF son aburridos.

• Hay un paquete nuget llamado Swagger4WCF que genera automáticamente la descripción yaml para swagger 2.0 para cada interfaz que coincida con los atributos utilizados por WCF ( ServiceContract/OperationContract/WebGet/WebInvoke ).

2. Cómo funciona Swagger en el fondo

Swagger4WCF usa el patrón de compilación posterior de NuPack para activarse en el momento de la compilación.

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

  1. En el momento de la compilación, detectará los ensamblajes presentes en el directorio de salida, los abrirá con mono.cecil (para reflejar los ensamblajes) para generar la descripción esperada de yaml para Swagger 2.0. Swagger4WCF detecta WebGet / WebInvoke para proporcionar Verb / Method en estilo de serialización en yaml.

Pasos para implementar Swagger en tu aplicación:

  1. Instalar el paquete SwaggerWcf

  2. Configurar rutas WCF

Tenemos que agregar la ruta en el método Application_Start dentro de Global.asax

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))); }

Nota: edite Web.config y agregue lo siguiente (si aún no existe) dentro del bloque system.serviceModel

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>

  1. Configurar tipos automáticos de respuesta WCF (opcional)

Tenemos que agregar lo siguiente a Web.config. Esto permitirá que el servicio WCF acepte solicitudes y envíe respuestas basadas en los encabezados Content-Type.

<behavior name="webHttpBehavior"> <webHttp defaultOutgoingResponseFormat="Json" automaticFormatSelectionEnabled="true"/> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior> <!-- To avoid disclosing metadata information, set the values below to false before deployment --> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior>

  1. Decorar las interfaces de servicios WCF Para cada método, debemos configurar el atributo WebInvoke o WebGet, y agregar un atributo 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. Decora los servicios de la clase WCF.

• Agregue los atributos SwaggerWcf y AspNetCompatibilityRequirements a la clase que proporciona la ruta base para el servicio.

• Para cada método, agregue SwaggerWcfTag para categorizar el método y el SwaggerWcfResponse para cada respuesta posible del servicio.

[SwaggerWcfTag("Books")] [SwaggerWcfResponse(HttpStatusCode.OK, "Book found, value in the response body")] [SwaggerWcfResponse(HttpStatusCode.NoContent, "No books", true)] public Book[] ReadBooks() { }

  1. Decorar los tipos de datos utilizados en los servicios 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; } }

Referencia: - https://github.com/abelsilva/swaggerwcf

Eso es todo wcf para Swagger implementado. Por favor, libre si se enfrenta a cualquier problema.

Gracias abhi

He creado un servicio web RESTful en C # y lo he implementado en IIS. Cuando accedo al servicio HeadOffice.svc, tengo la opción de ver el WSDL (HeadOffice.svc? Wsdl). Lo que me gustaría hacer es tener la opción de ver el WADL (por ejemplo, HeadOffice.svc? Wadl). es posible?

He leído en el lugar que la opinión general es que esta no es la mejor práctica. Sin embargo, necesito el WADL para una tarea escolar, por lo que cualquier ayuda sería muy apreciada.


Supongamos que ya sabe que WADL no es estándar / no es ampliamente compatible. Y cuando alguien necesita WADL, puede ser mejor usar WS * / SOAP service + WSDL. Entonces tu tarea parece muy extraña.

De todos modos, WADL no es compatible "de fábrica" ​​en ninguna implementación de REST de Microsoft, ni WCF 3.5 Rest Starter Kit, ni WCF 4 REST, y ASP.NET WebAPI.

No hay herramientas confiables para WADL para .NET.

Cuando tu objetivo es generar código de cliente C # usando WADL, créeme, pasarás más tiempo escribiendo el código de cliente por ti mismo. Y hay mejores soluciones para eso.

Puede utilizar nuevas clases como la clase HttpClient o RestSharp o bibliotecas similares para escribir fácilmente a su cliente y será aún más rápido que buscar una solución WADL confiable para .NET.

Pregunta similar sobre : servicio reparador en .NET con WADL en lugar de WSDL

ACTUALIZACIÓN - Swagger: Durante algunos años , Swagger se ha establecido como tal. Puede comenzar a escribir la definición del servicio utilizando el YAML de Swagger en el editor de Swagger o dejar que genere swagger desde los servicios existentes, para .NET usando la biblioteca de Swashbuckle . El segundo es algo que teníamos con WSDL, y el editor de Swagger te permite generar repeticiones de cliente y servidor. Independientemente de que esté generando su servidor o cliente o no sea fanático de él, Swagger es realmente un formato de intercambio de contrato muy bueno para el servicio REST, no es una opción ideal sino una buena opción.