gpt4 book ai didi

c# - 无法在 IIS 托管的其余 WCF 服务中加载第三方 dll

转载 作者:行者123 更新时间:2023-11-30 15:01:28 24 4
gpt4 key购买 nike

我已将 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:它返回 服务器在处理请求时遇到错误。有关详细信息,请参阅服务器日志。

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

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

但对我来说没有任何用处。请给我一个解决方案。

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

最佳答案

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

关于c# - 无法在 IIS 托管的其余 WCF 服务中加载第三方 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14184990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com