1

您好,所以我一直试图让我的网站在单声道(在 ubuntu 服务器上)上运行,并且我几乎完全按照这些教程进行操作:

但是,当我的目录不是空白时,fastcgi 日志会显示:

    Notice  Beginning to receive records on connection.
    Error   Failed to process connection. Reason: Exception has been thrown by the target of an invocation.

我不太确定这意味着什么,根据我的操作,我可能会收到另一个错误,告诉我找不到资源:

无法找到该资源。

    Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.   Please review the following URL and make sure that it is spelled correctly.

请求的 URL:/Default.aspx/ 版本信息:Mono 运行时版本:2.10.8(tarball Thu Aug 16 23:46:03 UTC 2012)ASP.NET 版本:4.0.30319.1

如果我应该提供更多信息,请告诉我。

编辑:

我现在收到 nginx 网关错误。

我的 nginx 配置文件如下所示:

server {
    listen   2194;
    server_name localhost;
    access_log $HOME/WWW/nginx.log;

    location / {
      root $HOME/WWW/dev/;
      index index.html index.html default.aspx Default.aspx Index.cshtml;
      fastcgi_index Views/Home/; 
      fastcgi_pass 127.0.0.1:8000;
      include /etc/nginx/fastcgi_params;
    }
}

使用 xsp4 运行整个过程,我发现了“调用目标引发了异常”。

处理异常类型 TargetInvocationException 消息是异常已被调用的目标抛出。IsTerminating 设置为 True System.Reflection.TargetInvocationException:调用目标已引发异常。

服务器堆栈跟踪:在 System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr,
System.Reflection.Binder binder, System.Object[] 参数,
System.Globalization.CultureInfo 文化) [0x00000] in :0 在 System .Reflection.MethodBase.Invoke (System.Object obj, System.Object[] 参数) [0x00000] in :0
在 System.Runtime.Serialization.ObjectRecord.LoadData (System.Runtime.Serialization.ObjectManager 管理器, ISurrogateSelector 选择器, StreamingContext 上下文) [0x00000] 在 System.Runtime.Serialization.ObjectManager.DoFixups () [0x00000] 在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadNextObject (System.IO.BinaryReader 阅读器) [0x00000] 处的 [0x00000]在 :0
在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectGraph (BinaryElement elem, System.IO.BinaryReader reader, Boolean readHeaders, System.Object& result, System.Runtime.Remoting.Messaging.Header[]& headers) [0x00000]在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.NoCheckDeserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler 处理程序) [0x00000] 处的 0 处,在 System.Runtime.Serialization.Formatters 处的 0 处.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream) [0x00000] in :0 at System.Runtime.Remoting.RemotingServices.DeserializeCallData (System.Byte [] array) [0x00000] in :0 at (wrapper xdomain-dispatch ) System.AppDomain:DoCallBack (object,byte[]&,byte[]&)

[0] 处重新抛出异常:---> System.ArgumentException:无法绑定到方法“SetHostingEnvironment”。在 System.Delegate.GetCandidateMethod(System.Type 类型,System.Type 目标,System.String 方法,BindingFlags bflags,布尔 ignoreCase,布尔 throwOnBindFailure)[0x00000] 在 System.Delegate.CreateDelegate(System.Type 类型,System .Type 目标,System.String 方法,Boolean ignoreCase,Boolean throwOnBindFailure) [0x00000] 在 System.Delegate.CreateDelegate (System.Type 类型,System.Type 目标,System.String 方法) [0x00000] in :0 at System.DelegateSerializationHolder+DelegateEntry.DeserializeDelegate (System.Runtime.Serialization.SerializationInfo info) [0x00000] in :0 在 System.DelegateSerializationHolder..ctor (System.Runtime.Serialization.SerializationInfo info,
在 (wrapper xdomain-invoke) System.AppDomain:DoCallBack (System.CrossAppDomainDelegate) 在 (wrapper remoting-invoke-with-check) System.AppDomain:DoCallBack (System.CrossAppDomainDelegate) 在 System.Web.Hosting.ApplicationHost.CreateApplicationHost (System .Type hostType, System.String virtualDir, System.String physicalDir) [0x00000] in :0 at Mono.WebServer.VPathToHost.CreateHost (Mono.WebServer.ApplicationServer server, Mono.WebServer.WebSource webSource) [0x00000] in :0 at Mono.WebServer.XSP.Server.RealMain (System.String[] args, Boolean root, IApplicationHost ext_apphost, Boolean quiet) [0x00000] in :0 at Mono.WebServer.XSP.Server.Main (System.String[] args) [0x00000] 在:0

4

2 回答 2

3

在您的 nginx 配置中,执行此操作

fastcgi_index   /;

而不是这个:

fastcgi_index Default.aspx;

而不是这个:

fastcgi_index Views/Home/;

您希望 mono fastcgi 服务器查看基本请求。在 mvc3-land 中,没有 Default.aspx,因为一切都是通过路由完成的。因此,还要删除此行:

index index.html index.html default.aspx Default.aspx Index.cshtml;

另一件真正让您感到困扰的事情是,存在对运行时 2 .dll 的底层程序集引用,这些引用已在您的项目引用的库中编译。

当我发现来自 nuget 的 nhibernate 引用实际上是 3.5 个 .dll 时,我自己发现了这一点。这使得在一个库中,只有某些类型能够被加载,而其他类型则抛出了与实际发生的事情无关的疯狂异常。我通过使用 csharp 控制台发现了这一点。

让我了解潜在问题的第一个例外是:

System.TypeLoadException: Could not load type
    at (wrapper managed-to-native) System.Type:type_is_assignable_from (System.Type,System.Type)
于 2012-09-01T03:30:45.023 回答
0

404 网址是“/Default.aspx/”

因为它有它/最后它正在寻找一个目录,我猜你希望它寻找一个文件 Default.aspx 代替?

fastcgi 连接的 nginx 配置块是什么样的?

更新(在添加了请求的信息后):

http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_index解释了 fastcgi_index 指令。你设置它的方式有点奇怪,你将 Views/Home/ 添加到任何目录的 $fastcgi_script_name 中。

您可能希望将您的 fastcgi_index 设置为 Default.aspx (然后它将对目录的任何请求作为 directory/default.aspx 传递,我认为这是您想要的)

您也没有设置您的 script_filename,mono 可能使用它来知道要运行哪个文件(无论如何,这就是它与 php/ruby fastcgi 一起使用的方式)。

对于 location 块中的 nginx 参数,您可能需要以下内容:

fastcgi_index Default.aspx;
fastcgi_param SCRIPT_FILENAME $HOME/WWW/dev/home/$fastcgi_script_name;
fastcgi_pass 127.0.0.1:8000;
include /etc/nginx/fastcgi_params;

(如果我正确阅读了您的教程,则 SCRIPT_FILENAME 可能只是 $fastcgi_script_name )

顺便说一句,通常你会在 serverblock 级别设置一次 index 和 root 指令,这样你就不必为每个 location 块重复它,尽管因为你只有一个 location 块,这并不重要。

于 2012-08-19T20:55:53.420 回答