如何将本机 C/C++ *.dll 连接到 IIS 中承载的 WCF C#

本文关键字:IIS WCF 连接 dll 本机 C++ | 更新日期: 2023-09-27 18:33:31

我需要将库本机 x86 C/C++ *.dll连接到计算机本地托管的服务 WCF C# 4.0 (IIS7.5(。我通过http请求调用服务方法(方法[WebGet](。我收到错误:

http://s1.ipicture.ru/uploads/20120509/H8TVURsE.jpg

DllNotFoundException 未由用户代码处理

无法加载 DLL Li.dll:访问被拒绝(从 HRESULT 中排除:0x80070005 (E_ACCESSDENIED((

你能说出可能是什么问题吗?


库 Li.dll 的效率在控制台应用程序 C# 中测试过 - 工作成功。

视窗 7 x86.NET 4.0VS 2010IIS7.5

结构解决方案服务 WCF:

http://s1.ipicture.ru/uploads/20120430/vBXivN71.jpg

源代码

原生 C/C++ x86 Li.dll:

李·

extern "C" {
    __declspec(dllexport) int __cdecl SimulateGameDLL (int a, int b); 
}

李.cpp

#include "Li.h"
extern int __cdecl SimulateGameDLL (int num_games, int rand_in) {
   return 121; 
}

C#

WcfServiceLibrary1.IService1

[ServiceContract] public interface IService1{
    [OperationContract][WebGet] string GetData();
}

WcfServiceLibrary1.Service1

public class Service1 : IService1{
public string GetData(){
    ClassLibrary1.Class1 cl = new ClassLibrary1.Class1();
    var rt = cl.M(); 
    return string.Format("Value = : {0}", rt);  
}
}

库1.类1

public class Class1{
    [DllImport("Li.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
    public static extern int SimulateGameDLL(int a, int b);
    public int M() {
        var r = SimulateGameDLL(10, 20);            
        return r;
    }
}

强文本

如何将本机 C/C++ *.dll 连接到 IIS 中承载的 WCF C#

您可能应该授予对用户NETWORK SERVICE的访问权限以访问 dll 文件。