机器上装有VS 2003和VS 2005两个版本的VS,目前的主项目使用的VS 2003 + framework 1.1。由另一组人开发的一组纯粹的报表使用的是VS 2005。由于月末的时候需要打印的报表较多,而Web又只能一次显示一个报表,所以客户要求我做一个Windows Application来一次生成所有的报表的PDF文件并打印。在水晶报表的帮助下这个要求还十分非常容易的实现了。而问题也正好出现在水晶报表上。本机装有水晶报表十的开发版,主项目中也正常使用着。新的Windows Application则使用VS 2005开发,在本机开发测试OK。而客户机上则没有水晶报表。下载了水晶报表十for VS 2005的合并模块以后,制作安装文件,并测试安装。安装时,提示要关闭VS 2005,安装完成后也提示要重启计算机。当时并未在意。测试完成后,卸载了自己写的安装文件。再单独运行的时候程序抛出异常,提示找不到水晶报表十的COM组件。再没有卸载水晶报表的情况下,使用安装盘重装也不能解决问题。只有再安装一次自己的自作的那个安装程序。
公司的主系统是SAP的东西,有的时候老板想要一些小的新功能或是某个部门需要一个自己使用的小系统又不想买SAP的东西(贵啊),只有自己写和使用一些第三方免费或是开源的系统,这个时候就难免涉及到 Single Sign-On 。而在asp.net 2.0下是非常容易实现的。有SAP提供的“Sapsecu.dll”,“sapssoext.dll”2个dll再加上由公司SAP系统提供的"verify.pse"就足够了。 第一步 复制Sapsecu.dll到system32目录,并使用Rersrv32注册。 第二步 在项目里添加对sapssoext.dll的引用,vs2005会自动生成Interop.SAPSSOEXT.dll来让.net使用。 第三步 在你项目的根目录创建sap目录,并将SAP系统那边提供的verify.pse复制过去。位置倒到不是一定要在这里,只要你找得到就好。 第四步 在SAP系统那边,需要生成一个类似:http://yourserver/login.aspx?sso=werwerwerwe的链接,当然具体的页面需要你和那边的管理员商量来决定。这个链接是有时效性的,我在做测试的时候他们给的测试链接通常只能用一天。现在我们要做到就是我们这边的编码,在login.aspx的page_load里面实现: protected void Page_Load(object sender, EventArgs e) { string sso= Request.QueryString["sso"]; SAPSSOEXT.SSO2Ticket objSSO = new SAPSSOEXT.SSO2Ticket(); objSSO.CryptLib = "sapsecu.dll"; string strKeypath = Server.MapPath("~/sap/verify.pse"); //放在根目录比较容易找 object tt; tt = objSSO.EvalLogonTicket(strTicket, strKeypath, String.Empty); ...
Comments