JeffreySu / WeiXinMPSDK

微信全平台 .NET SDK, Senparc.Weixin for C#,支持 .NET Framework 及 .NET Core、.NET 8.0。已支持微信公众号、小程序、小游戏、微信支付、企业微信/企业号、开放平台、JSSDK、微信周边等全平台。 WeChat SDK for C#.
https://weixin.senparc.com
Apache License 2.0
8.43k stars 4.35k forks source link

客服接口发送图文消息,access_token过期后报System.Runtime.Serialization.SerializationException错误 #144

Closed zhujinhu21 closed 7 years ago

zhujinhu21 commented 8 years ago

CustomApi.SendNews(userWeixinInfo.Authorizer_Access_Token, openId, articleList); token过期会报错。 错误信息: Process ID: 6524

Exception: System.Runtime.Serialization.SerializationException

Message: Type 'Senparc.Weixin.Exceptions.ErrorJsonResultException' in Assembly 'Senparc.Weixin, Version=4.4.3.24839, Culture=neutral, PublicKeyToken=null' is not marked as serializable.

StackTrace: at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder) at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) at System.Runtime.Remoting.Channels.CrossAppDomainSerializer.SerializeObject(Object obj, MemoryStream stm) at System.AppDomain.Serialize(Object o) at System.AppDomain.MarshalObject(Object o)

JeffreySu commented 8 years ago

Token是统一的,如果同一时间其他接口可以用,只有这个借口有错的话应该是其他问题,你能确定吗?

zhujinhu21 commented 8 years ago

我有多个项目都用到了access_token,我把token保存到数据库中,每次读取的时候判断token是否过期,过期重新获取,我在读取每个授权公众号的时候使用了缓存,有可能读取到缓存的公众号信息(appid,token ,expiretime),如果使用了过期的token,会报Message: Type 'Senparc.Weixin.Exceptions.ErrorJsonResultException' in Assembly 'Senparc.Weixin, Version=4.4.3.24839, Culture=neutral, PublicKeyToken=null' is not marked as serializable. 这个错误吗

JeffreySu commented 8 years ago

如果过期是会抛出异常的,但是这个异常应该会被我们Container接收并处理掉。不知道你是否按照Demo里面的示例来处理的?

JeffreySu commented 8 years ago

大多数接口都自动使用了Container和相关的Wrap方法,可以自动处理过期。