3

我已经主持了一个Rest WCF到我的IIS 7. 我测试了一切,除了导入dll. 我的实例类代码如下:

[OperationContract, WebInvoke(Method = "GET", UriTemplate = "/getname?name={name}&age={age}", ResponseFormat = WebMessageFormat.Json)]
    bool getname(string name, string age);

[OperationContract, WebInvoke(Method = "GET", UriTemplate = "/getcallfromdll?name={name}&age={age}", ResponseFormat = WebMessageFormat.Json)]
    bool getcallfromdll(string name, string age);

而上述方法的定义是:

public string getname(string name, int len)
    {
        return "It's working";
    }
public string getcallfromdll(string name, int len)
    {
        return UnsafeNativeMethods.getvalue(name, len); //Unsafe.. is a internal structure
    }

internal static class UnsafeNativeMethods
    {
        const string _dllLocation = "school.dll";

        [DllImport(_dllLocation, CallingConvention = CallingConvention.Cdecl)]
        public static extern bool getvalue(string name, String len);
     }

尝试运行时localhost:8085/service.svc/getname?name=kajn&len=21:它返回"It's working",这是正确的,但每当我尝试调用时localhost:8085/service.svc/getcallfromdll?name=kajn&len=21:它返回The server encountered an error processing the request. See server logs for more details.

我搜索了它,不知何故我知道这一切都是由于服务而发生的,无法找到DLL. 为了解决这个问题,我尝试将我的 dll 放在以下位置,但它没有帮助我:(:

  • 系统32/inetsrv
  • SysWOW64/inetsrv
  • 在 bin 文件夹中
  • 我还将项目所在的文件夹放在同一个文件夹中。

但没有什么对我有用。请建议我一个解决方案。

注意:dll 没有问题,因为我从自托管的 WCF 应用程序调用 dll 方法并且它运行良好。当时我把我的dll放入bin/debug文件夹中。

4

2 回答 2

3

我猜想这可能与 IIS 可能将二进制文件复制到影子位置这一事实有关,而当它这样做时,它可能没有意识到可能需要非托管 dll。您的“school.dll”是您的 WCF 解决方案的一部分吗?它是作为参考添加的吗?它还依赖于任何其他非托管 dll 吗?下次遇到该错误时,您可以尝试搜索系统以查找 WCF dll 的所有实例,然后如果您在影子位置找到一个,请查看您的“school.dll”是否也在那里。

于 2013-01-07T03:18:06.270 回答
2

好吧,您应该在服务器上打开 WCF 跟踪并查看实际的错误/异常是什么。但我会怀疑某种与权限相关的错误...即可以找到 DLL,但 IIS 工作进程没有正确的权限来读取它或执行其中的方法。仅出于调试目的,请尝试设置 DLL 的权限,以便“每个人”都可以读取/执行它。

于 2013-01-07T03:12:06.367 回答