问题起因
象往常一样登录下APP,结果提示服务器端接口错误。吓得我赶紧上服务器上看看。
第一步:检查原因
因为只要服务器出错,后台会通过Log4net记录错误日志,看看日志怎么说。
关键字是“超出本地计算机网络适配器卡的名称限制”,google一下,大概意思是本地端口被占用完了。不能响应了。
第二步:检查下端口占用,打开cmd,输入“netstat -an”查看下端口占用。
超级多的本地端口被打开,状态为CLOSE_WAIT。对方的端口搜索了下,没有明显发现是哪家公司,但是就是这固定的2-3个IP地址。
第三步:netstat -an没有显示具体是那个进程占用的。下载一个TCPView看看试试
发现是进程ID为59872的进程占用的。
第四步:打开任务管理器,显示PID。
发现是一个IIS站点占用的,而且这个站点没有做任何事,只做推送。推送用的xx公司推送的SDK(就事论事,不说公司)。加上上面的IP地址访问后提示“没有正确的查找到Json接口”
几乎可以确定是xx公司推送SDK的问题。
回想一下,这个网站是做推送用的,当另外的站点调用这个站点做推送的时候,xx公司推送SDK提交一个http请求,但是没有释放。一直占用了这个端口。下一次推送又占用一个,一直到端口占用完毕。
解决:
第一步:先重启IIS,果然端口不占用了,访问也恢复正常了。
第二步:与xx公司技术支持人员联系,修改SDK。虽然回馈还算及时,但是最终的结果是没有很好的办法。
好吧,推送已经集成到了APP,不能轻易变动。只好把服务器的推送SDK从C#版本改成RestAPI了。改成RestAPI之后问题解决,也从侧面佐证了应该是C# SDK的问题。