当前位置:编程学习 > C#/ASP.NET >>

请教一个问题 服务端WebService里使用互操作调用了一个C++的dll出错。如果不用WebService就不出错。

我有一段代码是调用一个c++写的dll里的一个函数。使用的是互操作Interoperation方式把c++的dll在c#中重新声明了一遍,然后调用的。

这个调用在一般的WindowsForm应用程序中没有任何问题。控制台也没有问题。

当我把这个调用放在服务端,让客户端通过WebService与服务端通信,相当于客户端给服务端发了一个指令,然后服务端就调用这个互操作的dll调用,调用时就会报错“System.Web.Services.Protocols.SoapException: 服务器无法处理请求。 ---> System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”。

这个错误是在客户端报出的。实际上是服务端的异常传到客户端的。在“--->”之前的是客户端的报错,之后的是服务端的异常信息。

请问这个是什么原因?是不是因为WebService里的某个设置或者某个注意事项我没有搞好??

请教用过WebService的以及用过互操作的朋友。

--------------------编程问答-------------------- IIS权限不够,需要通过 dcomcnfg 为C++组件添加访问权限。 --------------------编程问答--------------------
引用 1 楼 fangxinggood 的回复:
IIS权限不够,需要通过 dcomcnfg 为C++组件添加访问权限。

请教一下具体的操作。

我打开了组件服务, 把dcom下面的 IIS Admin Service 的属性里的“安全”和“标识”选项卡里的相关选项都改为管理员的权限了,重启IIS后,访问网站时提示:"A Required privilege is not held by the client,然后我又按照http://support.microsoft.com/kb/922737上介绍的办法操作后,可以正常访问网页和webService了,但是还是在调用dll的时候出错。 --------------------编程问答-------------------- 错了,需要权限的是IIS上你的Application运行所使用的账户,一般而言就是其所在的Application Pool的关联账户。必要时新建一个Application Pool,设定所需权限后给你的Application用。
补充:.NET技术 ,  Web Services
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,