• 配置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

  • 相关阅读:
    Nginx internal 指令限制访问图片资源文件
    Laravel 5 中文文档 CHM 版
    Educational Codeforces Round 89 (Rated for Div. 2)
    Markdown写的第一篇文章,猜猜里边有什么东西吧!
    Git暂存流程
    Java BIO、NIO与AIO的介绍(学习过程)
    如何在Mac中安装telnet
    使用IDEA编译java程序时,出现的编译错误: error:java:错误:不支持发行版本5
    Java中请优先使用try-with-resources而非try-finally
    Redis入门学习(学习过程记录)
  • 原文地址:https://www.cnblogs.com/ddrsql/p/5920562.html
Copyright © 2020-2023  润新知