3

私は自分のをホストしましRest WCFIIS 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を次の場所に配置しようとしましたが、役に立ちませんでした:(:

  • system32 / inetsrv
  • SysWOW64 / inetsrv
  • binフォルダに
  • また、プロジェクトが存在するのと同じフォルダーを配置します。

しかし、私には何も機能しません。解決策を提案してください。

注:自己ホスト型のWCFアプリケーションからdllメソッドを呼び出し、完全に機能していたため、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を読み取ったり、その中でメソッドを実行したりするための適切なアクセス許可がありません。デバッグの目的で、「Everyone」が読み取り/実行できるようにDLLのアクセス許可を設定してみてください。

于 2013-01-07T03:12:06.367 に答える