配置WCF同时支持WSDL和REST,swaggerwcf生成文档

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置WCF同时支持WSDL和REST,swaggerwcf生成文档相关的知识,希望对你有一定的参考价值。

配置WCF同时支持WSDL和REST,SwaggerWCF生成文档

VS创建一个WCF工程,通过NuGet添加SwaggerWcf

创建完成后通过 程序包管理控制台

pm>Install-Package SwaggerWcf

也可在 工具 -> NuGet包管理器 -> 管理解决方案的NuGet程序包 安装。

配置

首先对项目添加Global.asax文件,改动如下:

 

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

 

Web.config配置文件改动如下:

在<configuration>节点添加

  <configSections>
    <section name="swaggerwcf" type="SwaggerWcf.Configuration.SwaggerWcfSection, SwaggerWcf" />
  </configSections>

  <swaggerwcf>
    <tags>
      <tag name="LowPerformance" visible="false" />
    </tags>
    <settings>
      <setting name="InfoDescription" value="Sample Service to test SwaggerWCF" />
      <setting name="InfoVersion" value="0.0.1" />
      <setting name="InfoTermsOfService" value="Terms of Service" />
      <setting name="InfoTitle" value="SampleService" />
      <setting name="InfoContactName" value="Abel Silva" />
      <setting name="InfoContactUrl" value="http://github.com/abelsilva" />
      <setting name="InfoContactEmail" value="no@e.mail" />
      <setting name="InfoLicenseUrl" value="https://github.com/abelsilva/SwaggerWCF/blob/master/LICENSE" />
      <setting name="InfoLicenseName" value="Apache License" />
    </settings>
  </swaggerwcf>

在<serviceHostingEnvironment>节点添加

    <standardEndpoints>
      <webHttpEndpoint>
        <!--   
            Configure the WCF REST service base address via the global.asax.cs file and the default endpoint   
            via the attributes on the <standardEndpoint> element below  
        -->
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" crossDomainScriptAccessEnabled="true"/>
      </webHttpEndpoint>
    </standardEndpoints>

IService1.cs文件中改动如下:

入参、返回有多个时BodyStyle = WebMessageBodyStyle.Wrapped

        [OperationContract]
        [SwaggerWcfPath("标题GetData", "方法详细说明")]
        [WebInvoke(Method = "GET", UriTemplate = "GetData?value={value}",
            BodyStyle = WebMessageBodyStyle.Bare,
            RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        string GetData(int value);

 Service1.svc.cs文件中改动如下:

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [SwaggerWcf("/Service1")]
    public class Service1 : IService1
    {
        [SwaggerWcfTag("Service1 服务")]
        [SwaggerWcfResponse(HttpStatusCode.Created, "Book created, value in the response body with id updated")]
        [SwaggerWcfResponse(HttpStatusCode.BadRequest, "Bad request", true)]
        [SwaggerWcfResponse(HttpStatusCode.InternalServerError,
            "Internal error (can be forced using ERROR_500 as book title)", true)]
        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }

        [SwaggerWcfTag("Service1 服务")]
        public string GetDataT(CompositeType composite, int value)
        {
            return string.Format("You entered: {0}", value);
        }

        public string GetDataA(CompositeType composite)
        {
            return string.Format("You entered: {0}", composite.StringValue);
        }

        [SwaggerWcfTag("Service1 服务")]
        public string GetDataB(CompositeType composite, CompositeType compositea)
        {
            return string.Format("You entered: {0}", composite.StringValue);
        }

        [SwaggerWcfTag("Service1 服务")]
        public string GetDataTT(string str, int value)
        {
            return string.Format("You entered: {0}", value);
        }

        [SwaggerWcfTag("Service1 服务")]
        public CompositeType GetDataUsingDataContract(CompositeType composite)
        {
            if (composite == null)
            {
                throw new ArgumentNullException("composite");
            }
            if (composite.BoolValue)
            {
                composite.StringValue += "Suffix";
            }
            return composite;
        }
    }

以上配置可参考https://github.com/abelsilva/swaggerwcf。

生成接口文档

wcf自带的rest文档:

swaggerwcf生成的文档:

WSDL调用

使用控制台程序添加服务调用:

REST调用

Network请求和结果:

例子下载地址:https://pan.baidu.com/s/1o8dGnVG

以上是关于配置WCF同时支持WSDL和REST,swaggerwcf生成文档的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WSDL 中使用 HTTPS 为卸载 SSL 后的 WCF 服务配置服务端点

如何禁止 WCF 元数据/wsdl

如何同时使用 SOAP WCF 服务和 REST API

如何在 WCF 上隐藏 wsdl 信息?

怎么用cxf的wsdl2java解析wcf生成的wsdl

WCF学习之旅—实现支持REST客户端应用(二十四)