背景:由于业务变化,博主所在公司老板决定将一个公司拆分成多个BU(Business Unit)运营,各个BU自负盈亏。

涉及到MES和WMS改造非常多,例如:SAP下达工单到MES要带MRP范围、MES下达备料需求给WMS也要带对应的BU标识、WMS要根据BU标识划分仓位库位等等。

此次经验教训来自于WMS拆分BU上线后,仓库部门会提供一份历史库存清单,这份清单包含历史库存料号、现有库存、旧仓位、分BU后的新仓位等信息,而博主需要根据这份清单,做一个程序批量移动WMS和SAP的库存。

SAP移动库存的程序很简单,整合一下excel的信息,调用标准的货物移动BAPI即可。

调用程序也简单,博主做了一个简易的Winform程序,将Excel数据读到DataTable上,然后调用SAP提供的web service接口即可。

测试环境一路做下来,非常顺利,测试也完美通过。

但是到了上线这天,移动历史库存的时候,不出意外的出了意外。

Winform程序在调用SAP接口的时候一直提示消息体过大,要修改maxReceivedMessageSize 参数,调用webservice超时等等报错。

由于博主还是有丰富的项目经验在身,加上这个程序本身就是博主开发的,当即想了两个解决方案

方案一:根据程序报错的提示,调整参数和代码,完成库存在两个系统的移动。

方案二:直接调整代码,将一整张表作为入参的调用方式修改成循环+并行调用,每次只做一笔物料移动,最终完成库存转移。

由于时间紧、任务重,并且程序是博主亲手写的,所以博主当机立断选择了方案二,原因是如果选择方案一,就算调整好了参数,但是如果业务部门提供的excel数据有问题,库存移动也会失败,无法按时完成,相比之下,方案二,一笔笔的移动物料,就算有部门物料数据错误,也能成功移动大部分物料,最后将处理失败的库存当初拎出来处理即可。

最后,项目成功上线了,但是上线过程中遇到的问题还是需要复盘。

为此,博主事后在测试环境复现了消息体过大,调用webservice超时等报错。

由于博主公司一直用的是VS2008,之前遇到这样的问题都是修改对应的appconfig文件里的maxReceivedMessageSizemaxBufferSize 、closeTimeout、openTimeout、receiveTimeout、sendTimeout等参数即可解决的,如下图:

MES项目实施项目管理过程 mes项目经验_web application

但是,此次分BU的时候,博主的经理要求用VS2019进行开发,而VS2019在解析同样的url的时候,生成的appconfig文件里并没有这些属性,手工敲上这些属性也提示不支持,如下图:

MES项目实施项目管理过程 mes项目经验_visual studio_02

通过查找资料和询问AI发现,VS2019因为安全特性等原因,appconfig文件里不允许使用maxReceivedMessageSizemaxBufferSize 、closeTimeout、openTimeout、receiveTimeout、sendTimeout 这些参数。

MES项目实施项目管理过程 mes项目经验_web application_03

所以,博主修改代码,在生成client前,写上这几行代码,即可解决,成功运行代码,不会提示消息体过大,超时等报错,并能成功接收到sap返回的信息。

// 创建基本HTTP绑定
             BasicHttpBinding binding = new BasicHttpBinding();
             binding.MaxReceivedMessageSize = 2147483647; // 设置消息体最大大小
             binding.MaxBufferSize = 2147483647; // 设置缓冲区
             EndpointAddress endpoint = new EndpointAddress("url的endpoint");
             MaterialPost.Z_IF_WMS_ST_IO_POSTClient client = new MaterialPost.Z_IF_WMS_ST_IO_POSTClient(binding, endpoint);
             client.InnerChannel.OperationTimeout = TimeSpan.FromSeconds(6000);

如下图:

MES项目实施项目管理过程 mes项目经验_c#_04

最后,虽然方案一在项目过程中不适用,就算再来一遍,博主也不会在上线过程中使用方案一。

但是,遇到问题后,就算但是绕过去了或用其他方式解决了,我们还是要有对应的复盘能力和刨根问底的精神,这才是博主想要表达的核心。

技术人,技术魂,2024年继续加油!