在SSIS中调用Web Service控件时报错说 不能为当前web service产生代理

浏览: 1508

今天把一个package从测试环境移到生产环境上, 结果报出了下面的错误. 大意是说在调用到web service控件的时候, 因为代理不能正确生成, 所以这个控件运行失败了, 还煞有介事的列出了一个缺失的文件路径来.


Package Name: packagename

-1073548540

An error occurred with the following error message:"Microsoft.SqlServer.Dts.Tasks.WebServiceTask.WebserviceTaskException:Could not generate the proxy for the specified Web service. The following errors were encountered while generating the proxy: Source file'C:\Windows\TEMP\tretiafj.0.cs' could not be found No source files specified .

   atMicrosoft.SqlServer.Dts.Tasks.WebServiceTask.WebServiceTaskUtil.Invoke(DTSWebMethodInfomethodInfo, String serviceName, Object connection, VariableDispensertaskVariableDispenser)

   atMicrosoft.SqlServer.Dts.Tasks.WebServiceTask.WebServiceTask.executeThread()".


先简单说下这个package的作用是什么. 首先它会先从另一个数据库的某张表读出一些数据并存在本地数据库的某个表里, 然后有一系列的计算逻辑来判断数据是不是真的更新了 (这里不光涉及到数据的更新时间, 还需要对某些列进行计算, 当计算结果比上次的计算结果有不同的情况下才认为是真的更新了). 

如果更新了, 就通过一个web service 控件来触发Qlikview EDX事件, 进而让指定的qlikview文件开始刷新. (对Qlikview EDX感兴趣的同学可以参考下面英文文章)

https://community.qlik.com/docs/DOC-3024

https://community.qlik.com/docs/DOC-2650

再回到问题本身, 其实原因和运行这个job的账号有关系, 解决方法有两个:

第一个是确保生产环境运行package的账号有权限访问 C:\windows\temp文件夹

第二个方法是修改protection level, 从EncryptSensitiveWithUserKey或别的什么改成 Dont Save Sensitive

EncryptSensitiveWithUserKey 就意味着你在web service控件中指定的密码会被加密, 只有开发者的id才能解密. 这种情况下你就得在SQL Agent Job中使用代理账户, 里面填上开发者的账号密码才能成功运行这个package. 我相信多数人都不会希望这么干的, 还是用服务账号更好一些, 所以更简单的方法就是改成Dont Save Sensitive

推荐 0
本文由 Naralee 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册