c# webServices调用外部DLL的坑
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# webServices调用外部DLL的坑,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1672字,纯文字阅读大概需要3分钟。
内容图文
背景: web项目中需要调用一个c++写的DLL,里面有一整套的算法,传入参数,输出结果。 DLL是跟一个加密狗有绑定的,其中部分参数是必须插入加密狗才能够访问。一共涉及到3个文件RYDLL32.DLL、Syxgbdll.h(这个文件到底有没有用,我也不太清楚)、Syxgbdynamic.dll。 用C#直接dllimport Syxgbdynamic.dll 这个文件,可以找到所有可用的方法,而这里面有些方法是Syxgbdynamic.dll 去调用RYDLL32.DLL 才能得到结果。 在winform里面写了一段程序调用,一直正常,但是迁移到Asp.net WebServices上的时候,就报各种错,提示有”找不RYDLL32.DLL“ 在web服务下面,引用DLL的代码如下: [DllImport("Syxgbdynamic.dll", EntryPoint = "chebiao", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern double chebiao(string bh_p, double oil_h, double water_h); 之后就一直报错,经过2天的尝试,终于在VS 和IIS都能正常访问,解决方案如下: VS2015下正常访问: 1、如果是在VS中使用iisexpress作为web容器的情况下,将DLL拷贝到 C:\Program Files (x86)\IIS Express\ 的目录下 2、配置DLL的权限 给IIS_USER 和Network_Service 的用户权限 ? ? 在IIS下的配置重点(win10 IIS10环境下): 解决这些问题的重点: 1、配置DLL的权限 给IIS_USER 和Network_Service 的用户权限 2、将DLL 拷贝到IIS程序exe的执行根目录中,位置C:\Windows\System32\inetsrv 3、发布到IIS后,应用程序池要改成 启用32位程序 4、C:\Windows\System32\inetsrv 【发现在代码里面申明了DLL import后,则会自动被IIS拷贝进去(如果没有,请手工拷贝)】 5、C:\Windows\SysWOW64\inetsrv 这是发布后需要拷贝DLL的地方,如果存在DLL之间的引用,则剩下的DLL需要放到这里。(在进程管理器中,找到w3wp.exe的所在位置) ? 总结:感觉Syxgbdynamic.dll 在调用RYDLL32.DLL内部算法的时候,其是由IIS的相关进程负责去驱动的,所有其RYDLL32.DLL则必须跟其exe执行程序放在一起。 ? 本文抄袭 同事 刘神父内容总结
以上是互联网集市为您收集整理的c# webServices调用外部DLL的坑全部内容,希望文章能够帮你解决c# webServices调用外部DLL的坑所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。