相关问题为未启用安全模式,系统调用前面的登陆返回信息引起。解决办法就是启用webservice安全模式。启用安全模式参考附件文档。
如何安全性启用
一、修改eas\Server\eas\server\profiles\server1\config\webservice.propetties文件
isRomoteLocate=false
二、修改参数后,webservice调用端需要把登录返回的session传过去,
java调用示例如下,其它语言调用参考
EASLoginProxy proxy =null;WSContext context = null;
try {
//登录
proxy = new EASLoginProxyServiceLocator().getEASLogin();
context= proxy.login("kdjgf", "", "eas", "zs70sp5", "l2", 1);
//具体业务调用
String[][] vouchers= null;
WSGLWebServiceFacadeSrvProxy proxyWS= null;
proxyWS = new WSGLWebServiceFacadeSrvProxyServiceLocator().getWSGLWebServiceFacade();
//设置登录返回的session在soap头
((Stub) proxyWS).setHeader("http://login.webservice.bos.kingdee.com","SessionId", context.getSessionId());
vouchers = proxyWS.getVoucher("001", "2008", "5", 0, 0);
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
.net 语言调用:
对于net代码,k2可参考http://blog.sina.com.cn/s/blog_567100f90101a0py.html进行修改(不能直接用,这里用了ChildElement,多了一级,修改要去掉这一级)
目前是同事使用.net语言封装了报文,并封装成.dll文件,供大家使用,具体如下:
调用方法如下:
static void Main(string[] args)
{
string baseUrl =EasyConfig.UserData.GetNodeText("eas_services_url");
var setting =EasyConfig.UserData.GetDict(EasyConfig.UserData.GetNodeText("eas_env"));
//前面代码是获取登录配置信息
var voucherService = newEASVoucherLib.VoucherService(
baseUrl, //服务器url:http://10.2.1.144:6888/ormrpc/services,就是把后面具体的登录或导入凭证service前面公共的部分
setting["userName"], //下面参数参考调用登录EASLogin方法的参数
setting["password"],
setting["slnName"],
setting["dcName"],
setting["language"],
Convert.ToInt32(setting["dbType"]));
var voucherArr = newEASVoucherLib.WSWSVoucher[2];
//...构造凭证对象
//调用方法1
using (voucherService)
{
voucherService.ImportVoucher(voucherArr, 0, 0, 0);
}
//调用方法2
try
{
voucherService.ImportVoucher(voucherArr,0, 0, 0);
}
finally
{
//必须调用Dispose方法执行logout退出登录
voucherService.Dispose();
}
}
如需封装文件,请单独联系我,这个文件上传不了,请知晓!