我已向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放在以下位置,但它没有帮助我:(:
但对我来说没有任何作用。请建议我一个解决方案。
注意:dll没有问题,因为我从自托管的WCF应用程序中调用了dll方法,并且它运行正常。那时我将我的dll放入bin/debug
文件夹。
答案 0 :(得分:3)
我猜这可能与IIS可能将二进制文件复制到阴影位置这一事实有关,当它这样做时,它可能没有意识到可能需要非托管dll。你的“school.dll”是你的WCF解决方案的一部分吗?它是作为参考添加的吗?它还取决于任何其他非托管dll?下次出现该错误时,您可以尝试搜索系统以查找WCF dll的所有实例,然后如果在阴影位置找到一个,请查看是否还有“school.dll”。
答案 1 :(得分:2)
那么,您应该在服务器上打开WCF跟踪,看看实际的错误/异常是什么。但我怀疑某种与权限相关的错误...即可以找到DLL,但IIS工作进程没有正确的权限来读取它或执行其中的方法。仅出于调试目的,尝试在DLL上设置权限,以便“Everyone”可以读取/执行它。