更新Workday人力资源Web服务时遇验证错误求助
这个错误的核心是:你发送给Workday的SOAP请求里,Worker_Reference-urn:com.workday/bsvc元素被放在了Change_Other_IDs_Business_Process_Data下面,但Workday 40.2版本的API不允许该位置存在这个元素,属于请求结构不符合WSDL定义的校验错误。
给你几个具体的排查方向:
对比新旧版本的WSDL结构
找到Workday HR服务40.2版本的WSDL文件,定位Change_Other_IDs_Business_Process_Data元素的定义,查看它允许的子元素列表。再对比生产环境旧版本的WSDL,确认Worker_Reference的正确嵌套位置——大概率是新版本API把Worker的引用移到了其他父元素下(比如Business_Process_Parameters),或是元素名称/命名空间发生了变动。检查请求报文的实际结构
用抓包工具(比如Fiddler、Visual Studio的Web服务调试功能)查看程序发送给Workday的SOAP请求XML,确认Worker_Reference是否真的被放在了Change_Other_IDs_Business_Process_Data内部。如果是,调整代码将其移到WSDL规定的正确位置。重新生成Web服务代理类
如果你是通过Visual Studio的「添加服务引用」生成的C#代理类,升级Workday版本后必须重新生成代理类。旧代理类基于旧版本WSDL生成,结构和40.2版本不匹配,会导致构建的请求元素位置错误。重新生成后,按照新代理类的结构调整代码(比如Worker引用属性可能被移到了新的类中)。查看Workday版本变更说明
查阅Workday HR服务40.2的Release Notes,重点关注Change_Other_IDs业务流程的变更内容,看是否提到Worker引用方式的修改,比如废弃旧元素、新增必填元素等。
内容的提问来源于stack exchange,提问作者soaltee

