{

  "Sers": {
    /* 通讯层配置 */
    "CL": {
      /* 共用配置，子项共用，覆写子项未指定的配置 */
      "Config": {

        /* 请求超时时间（单位ms，默认60000） */
        "requestTimeoutMs": 60000,

        /* 后台处理消息的线程个数（单位个，默认2） */
        "workThreadCount":1,

        //HeartBeat  
        /* 心跳检测时间间隔（单位ms，默认10000,若指定为0则不进行心跳检测） */
        "heartBeatIntervalMs": 10000,
        /* 心跳检测超时时间（单位ms，默认30000） */
        "heartBeatTimeoutMs": 30000,
        /* 心跳检测失败重试次数（单位次，默认10） */
        "heartBeatRetryCount": 10,

        /* 连接秘钥，用以验证连接安全性。服务端和客户端必须一致 */
        "secretKey": "SersCL"
      },
      /* one conn is one channel.can be multiable */
      "Server": [
        {
          // Socket.Iocp
          /* (x.1) type - Iocp */
          /* the class of Builder in assemblyFile  */
          "className": "Sers.CL.Socket.Iocp.OrganizeServerBuilder",


          /* (x.2) conn config */
          /* 服务端 监听地址。若不指定则监听所有网卡。例如： "127.0.0.1"、"sers.com"。*/
          //"host": "127.0.0.1",
          /* 服务端 监听端口号。例如： 4501 */
          "port": 4501
        }        
      ]
    },

    /* LocalApiService 配置,可不指定 */
    "LocalApiService": {

      /* 后台服务的线程个数（单位个，默认0,代表不开启服务）*/
      "workThreadCount": 4,

      /* 超时时间，若不指定则后台任务永不超时。（主动关闭超过此时间的任务,实际任务强制关闭的时间会在1倍超时时间到2倍超时时间内)。单位：ms。*/
      //"timeout_ms": 10000,


      /* 是否 输出本地Api的调用信息到（ApiTrace）Log文件。默认:false */
      "PrintTrace": false,
     


      /* 默认站点名称，可多个,可不指定 */
      //"apiStationNames": [ "demo" ],

      /* Api加载器配置 */
      "ApiLoaders": [
        {
          //（通过反射从此包中获取要加载的api）
          /* 在此Assembly中查找服务(如 App.StationDemo.Station.dll)(assembly、assemblyFile、assemblyName 指定任一即可) */
          "assemblyFile": "Did.SersLoader.Demo.dll",

          /* ApiStation名称。可不指定。（优先级从高到低：  apiStationName_Force 、 在代码上的SsStationNameAttribute特性指定 、 apiStationName 、 appsettings.json指定） */
          "apiStationName": "demo"
        },
        {
          /* ApiStation名称。可不指定。（优先级从高到低：  apiStationName_Force 、 在代码上的SsStationNameAttribute特性指定 、 apiStationName 、 appsettings.json指定） */
          "apiStationName": "_robot_",

          /* 在此Assembly中查找服务(如 App.StationDemo.Station.dll)(assembly、assemblyFile、assemblyName 指定任一即可) */
          "assemblyFile": "App.Robot.Station.dll"
        }


      ],


      //调用api前的事件，可不指定
      "//BeforeCallApi": [
        {
          //Bearer 在调用接口前，会获取 rpcData.http.headers.Authorization(格式为 "Bearer xxxxxx")，并作为参数调用接口api_verifyAt，把返回数据放到 rpcData.user.userInfo
          "className": "Bearer",
          /* 验证at接口的地址 */
          "api_verifyAt": "/AuthCenter/account/verifyAt",
          /* 验证at接口的httpMethod。(如 GET POST 可不指定) */
          "api_httpMethod": "POST"
        },

        {
          //AccountInCookie 在调用接口前，会获取 rpcData.http.headers.Cookie(格式为 "user=xxx;c=7")中的user，在账号列表中比对userToken，回写 CallerSource(rpcData.caller.source) 和 userInfo(rpcData.user.userInfo)
          "className": "AccountInCookie",
          "account": [
            {
              "userToken": "admin_123456",
              //"CallerSource": "Internal",
              "userInfo": {
                "name": "超级管理员",
                "入口": "Gover网关"
              }
            }
          ]
        }
      ]
    },



    /* ServiceStation配置,可不指定 */
    "ServiceStation": {

      /* 自动上报cpu Usage。不指定则不上报 */
      "//UsageReporter": {
        /* 上报时间间隔（单位：秒） */
        "intervalSecond": 2
      },


      /* serviceStation站点信息 */
      "serviceStationInfo": {
        /* 服务站点名称 */
        "serviceStationName": "ServiceCenter",

        /* 服务站点版本信息,若不指定则为入口链接库的版本号 */
        //"stationVersion": "2.1.1",

        /* [json]服务站点额外信息,可不指定 */
        "info": null
      }

    },



    /* ServiceCenter 配置,可不指定 */
    "ServiceCenter": {

      /* 是否 输出Api注册事件到（Info）Log文件。默认:true  */
      "ApiRegistEvent_Print": true,


      /* api路由管理方式,可不指定。可为："RESTful","IgnoreHttpMethod"。若不指定或未指定有效值，则默认为"RESTful" */
      //"ApiRouteType": "IgnoreHttpMethod",


      //调用api前的事件，可不指定
      "BeforeCallApi": [
        {
          //Bearer 在调用接口前，会获取 rpcData.http.headers.Authorization(格式为 "Bearer xxxxxx")，并作为参数调用接口api_verifyAt，把返回数据放到 rpcData.user.userInfo
          //"className": "Bearer",
          /* 验证at接口的地址 */
          "api_verifyAt": "/AuthCenter/account/verifyAt",
          /* 验证at接口的httpMethod。(如 GET POST 可不指定) */
          "api_httpMethod": "POST"
        },

        {
          //AccountInCookie 在调用接口前，会获取 rpcData.http.headers.Cookie(格式为 "user=xxx;c=7")中的user，在账号列表中比对userToken，回写 CallerSource(rpcData.caller.source) 和 userInfo(rpcData.user.userInfo)
          //"className": "AccountInCookie",
          "account": [
            {
              "userToken": "admin_123456",
              //"CallerSource": "Internal",
              "userInfo": {
                "name": "超级管理员",
                "入口": "Gover网关"
              }
            }
          ]
        }
      ]

    },





    /* 网关配置(同目录下可以指定mappings.json文件) ，可不指定 */
    "Gateway": {

      /* Rpc配置，可不指定 */
      "Rpc": {
        /* 网关转发的请求中的rpc 信息中的 CallerSource。（暗指调用来源，默认"OutSide"）  */
        //"CallerSource": "OutSide"
      },

      "WebHost": {

        /* url,可多个 */
        "urls": [ "http://*:4580" ],

        /* http回应中的默认Content-Type。若不指定则默认为 "application/json; charset="+Serialization.Instance.charset  */
        "//ResponseDefaultContentType": "application/json; charset=UTF-8",


        /* 映射静态文件。若不指定则不映射静态文件 */
        "staticFiles": {

          /* 请求路径（可不指定）。demo："/file/static"。The relative request path that maps to static resources */
          //"requestPath": "/file",


          /* 静态文件路径。可为相对路径或绝对路径。若为空或空字符串则默认为入口程序所在目录下的wwwroot文件夹。demo:"wwwroot/demo" */
          "rootPath": "wwwroot",

          /* 默认页面（可不指定）。An ordered list of file names to select by default. List length and ordering  may affect performance */
          "defaultFileNames": [ "index.html" ],

          /* 是否可浏览目录(default false)。Enables directory browsing */
          //"useDirectoryBrowser": false,

          /* 静态文件类型映射配置的文件路径。可为相对路径或绝对路径。例如"contentTypeMap.json"。若不指定（或指定的文件不存在）则不指定文件类型映射配置 */
          "contentTypeMapFile": "contentTypeMap.json",

          /* 回应静态文件时额外添加的http回应头。可不指定。 */
          "responseHeaders": {

            //设置浏览器静态文件缓存3600秒
            "Cache-Control": "public,max-age=3600"
          }
        }
      },


      //调用api前的事件，可不指定
      "BeforeCallApi": [
        {
          //Bearer 在调用接口前，会获取 rpcData.http.headers.Authorization(格式为 "Bearer xxxxxx")，并作为参数调用接口api_verifyAt，把返回数据放到 rpcData.user.userInfo
          //"className": "Bearer",
          /* 验证at接口的地址 */
          "api_verifyAt": "/AuthCenter/account/verifyAt",
          /* 验证at接口的httpMethod。(如 GET POST 可不指定) */
          "api_httpMethod": "POST"
        },

        {
          //AccountInCookie 在调用接口前，会获取 rpcData.http.headers.Cookie(格式为 "user=xxx;c=7")中的user，在账号列表中比对userToken，回写 CallerSource(rpcData.caller.source) 和 userInfo(rpcData.user.userInfo)
          "className": "AccountInCookie",
          "account": [
            {
              "userToken": "admin_123456",
              "CallerSource": "Internal",
              "userInfo": {
                "name": "Gover管理员",
                "入口": "Gover网关"
              }
            }
          ]
        }
      ],


      /* 服务限流配置，可不指定 */
      "rateLimit": [
        {
          /* 服务限流key，标识一个限流服务，必须唯一 */
          "rateLimitKey": "rate",

          /* 固定时间窗口限流。在单位时间（msInterval）内限制最大请求数量为reqLimit。超出数量的请求将被拒绝 */
          "rateLimitType": "FixedWindow",
          /* 单位时间内最大请求数量（个）*/
          "reqLimit": 100000,
          /* 单位时间长度（单位:ms）*/
          "msInterval": 1000
        }
      ]

    }



  },





  /* Vit工具配置，可不指定 */
  "Vit": {

    /* 日志配置,可不指定 */
    "Logger": {
      /* print the log to console. default:false  */
      "PrintToConsole": true
    },


    /* 序列化配置，可不指定 */
    "Serialization": {
      /* 序列化字符编码。可不指定，默认 UTF8。只可为 UTF7,UTF8,UTF32,ASCII,Unicode。 */
      "Encoding": "UTF8",

      /* 时间序列化格式。可不指定，默认 "yyyy-MM-dd HH:mm:ss" */
      "DateTimeFormat": "yyyy-MM-dd HH:mm:ss"
    },


    "//Kestrel": {
      /* (int64) the maximum allowed size of any request body in bytes.  When set to null, the maximum request body size is unlimited. */
      "MaxRequestBodySize": 2000000000,

      /* (int32) A limit on the length of individual form values. Forms containing values that exceed this limit will throw an System.IO.InvalidDataException when parsed. */
      "ValueLengthLimit": 2000000000,

      /* (int64) A limit for the length of each multipart body. Forms sections that exceed this limit will throw an System.IO.InvalidDataException when parsed. */
      "MultipartBodyLengthLimit": 2000000000
    }

  }




}
