互软研发团队

Talk is cheap. Show me the code.

基于WeChatJavascriptSdk的企业微信jsapi访问出错提示"接口调用超过限制"解决方案

# 问题现象

基于MobilePortal整合企业微信以后,频繁刷新应用一段时间会出现提示:微信获取JavaScriptTicket异常:45009,文本:api freq out of limit, hint: [1545303237_2_5380272362b73d58bce5bb54879e0216], more info at https://open.work.weixin.qq.com/devtool/query?e=45009。

# 问题原因

造成以上问题的原因是企业微信提供的过期时间字段(expires_in)没有被赋值给过期时间重新计算,导致每次请求jsapi ticket都是过期重新获取状态。

#解决方案

更新附件的Beyondbit.Web.Infrastructure.dll文件,如果目前使用的该dll版本大于2.0.6929.1可以忽略该问题。

Beyondbit.Web.Infrastructure.dll (84KB)

如何启用开发框架日志输出

Beyondbit Framework使用log4net记录日志,如果想要查看日志输出可以创建一个名称为"log4net.config"的配置文件,将它放在应用系统的根目录。详细的配置信息可以参考:http://logging.apache.org/log4net/release/manual/configuration.html

附件是一个简单的示例,它会将错误级别的日志写入到当前目录下名为log-file.txt的文件里面。

log4net.config (693B)

关于近期使用.NET开发框架系统出现错误"The value can not be null or an empty string,参数名:connectionString"解决方案

问题现象:


问题原因:

安装MySQL后会在.NET Framework对应版本的machine.config注册一个空的MySQL数据库连接字符串,文件的位置根据版本和架构不同:

dotnetfx 4 x64: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config

dotnetfx 4 x86: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

dotnetfx 2 x64:  C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config

dotnetfx 2 x86: C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config

ASP.NET启动以后,会根据目前所运行的环境将对应machine.config的配置和当前站点的Web.config进行合并并加载,旧版本的开发框架(2.0以下版本)默认访问下标为1的数据库连接作为默认连接,在machine.config新增了MySQL连接字符串配置后导致读取到的不再是应用系统配置的第一个数据库连接字符串。


解决方案:

目前有两个比较快速的解决方案,我们推荐第二个:

1、修改对应的machine.config,注释掉新增的MySQL部分。

2、通过Nuget连接研发中心的仓库,更新到最新版本的开发框架(至少2.0以上把那本),并参考如下进行配置:

    1)打开Web.config/App.config,定位到<Beyondbit.Framework.Web>配置节

    2)新增配置元素:<DefaultConnectionStringKey>{default key}</DefaultConnectionStringKey>,例如:<DefaultConnectionStringKey>mainDB</DefaultConnectionStringKey>


补充:

如果对于这两个方案都不满意的情况下我们建议你可以开发自定义的ConnectionManager用来替换FrameConfig.config文件中配置的DefaultConnectionManager。

快速开发工具2.0 发布了,同时支持 协同办公、 UFFICE 7

快速开发工具 2.0 发布了,快去更新吧。

安装

  • 在Visual Stuidio 扩展中安装
               安装参考链接
  • 下载VSIX 文件直接安装


同时支持 协同办公、 UFFICE 7。


UFFICE 7 Web项目模板和解决方案模板发布

UFFICE 7 Web项目模板和解决方案模板发布啦。

支持的Visual Studio 版本有 VS 2013, VS 2015, VS2017


解决方案模板VSIS文件下载地址:

https://marketplace.visualstudio.com/items?itemName=xakoy.UFFICE7WebSolution

Web项目模板

创建一���MVC4的项目模板。

解决方案模板

创建一个包含Entity、DAO、BO、UI、ReferenceDLL项目的Soultion。


安装完成后,新建项目时,如下图:


新版本快速开发工具暂时不支持Visual Studio 2017以上版本使用

由于Visual Studio 2017的插件开发进行了一些较大调整,导致新版本快速开发工具无法无缝升级,特此告知。

参考链接:How to: Migrate Extensibility Projects to Visual Studio 2017

单点登录(SSO) 客户端配置-采用WebService方式获取用户凭证

SSO自2.4版本以后,默认采取使用memcached存储用户凭证,SSO Client 获取凭证的时候也是采用memcached方式获取用户凭证。  那么SSO 2.4 版本+ 的 Client,如何去适配SSO 2.4以前的服务端呢?

SSO Client 2.4+ 通过配置的方式,可以使用WebService的方式获取用户凭证,去兼容 SSO 2.4 以前的服务端。

  1. 检查你的SSO Client 的版本程序集 是否大于 " 2.0.5497.23430 "
  2. 在你的站点Web.config 找到 appSettings ,添加以下二个下配置节
    <add key="SSO_UserTicketServiceType" value="Beyondbit.SingleSignOn.ClientForAspNet20.ServiceModels.StandardUserTicketService, Beyondbit.SingleSignOn.ClientForAspNet20" />

    <add key="SSO_Service" value="http://{SSO站点地址}/Service/WebService.asmx" />

基于开发框架的新增数据返回的自增长ID出现对应不上问题解决方案

调用开发框架DAO提供的Insert方法返回的自增长ID基于SQL Server内置的语句:SELECT @@IDENTITY,如果对应的数据表下包含插入的触发器并且也使用了自增长ID就会导致最终返回的ID为最后一个插入触发器的自增长ID。目前解决方案有2种如下:

1、插入触发器的表不使用自增长ID

2、当前表不使用自增长ID

P.S. SQL Server 2008以上版本支持通过"SELECT SCOPE_IDENTITY()"避免该问题,考虑到目前开发框架还要兼容SQL Server 2008以下版本暂不对开发框架进行调整。


对象选择器自定义数据源开发示例

请下载附件对象选择器示例.zip (8.8MB) 。
解压后直接运行 /Demo/Index 这个Vieiw . 如下图


开发框架配置不同DAO读取不同的数据库链接


引言

很多同事咨询DAO如何使用不是mainDB之外的其它数据库链接,本文通过使用开发框架的数据链接映射功能来实现。

使用数据链接映射

1、在Web.config中configSections结点配置一下配置

  <section name="Beyondbit.Framework.ConnectionStringMappings"
             type="Beyondbit.Framework.DataAccess.ConnectionStringMappingsSectionHandler, Beyondbit.Framework"/>
2、在Beyondbit.Framework.Web节点下增加如下配置:

<Beyondbit.Framework.Web>
    <ConnectionSettingsPolicy>Beyondbit.Framework.DataAccess.ConnectionSettingsMappingPolicy, Beyondbit.Framework</ConnectionSettingsPolicy>
  </Beyondbit.Framework.Web>
3、增加Beyondbit.Framework.ConnectionStringMappings节点,然后根据自己的需求增加不同的子节点

<Beyondbit.Framework.ConnectionStringMappings>
    <!-- 将Demo1.DAO这个所有的DAO类使用mainDB这个数据库 -->
    <assembly connectionName="mainDB"
              mapTo="Demo1.DAO"/>
    <!-- 将Demo2.DAO这个命名空间下所有的DAO类使用mainDB2这个数据库 -->
    <namespace connectionName="mainDB2"
               mapTo="Demo2.DAO"/>
    
<!-- 将Demo3.DAO.TestDAO3这个DAO类使用mainDB3这个数据库 -->
    <class connectionName="mainDB3"
           mapTo="Demo3.DAO.TestDAO3"/>
  </Beyondbit.Framework.ConnectionStringMappings>

以上方案需要开发框架1.0.2.1+版本支持。