为什么Web应用程序或WCF应用程序上的“CodeBehind”?

时间:2013-10-24 20:29:18

标签: asp.net asp.net-mvc wcf visual-studio iis

我想澄清MSDN文档中似乎有些矛盾的内容。

MSDN非常明确the distinction between a "web site" and a "web application."例如,它说你应该使用“应用程序”而不是“网站”,如果...... {/ p>

  

您希望避免将源代码放在生产服务器上。

好的,听起来不错,但是当你创建一个ASP.NET MVC“app”或一个WCF服务“app”时,你得到的第一件事是一个带有CodeBehind的描述文件,它指定了什么源代码到参考。例子:

对于ASP.NET MVC

<%@ Application Codebehind="Global.asax.cs" Language="C#" Inherits="Sample.MvcApplication" %>

对于WCF服务应用

<%@ ServiceHost CodeBehind="MyService.svc.cs" Language="C#" Service="Sample.MyService" %>

在这两个“app”示例中,“CodeBehind”假定您已在生产服务器上放置源代码。简而言之,从Visual Studio“App”或“项目”模板收到的内容基本上与MSDN文档声明的内容相矛盾。

更让人感到奇怪的是,至少在一些情况下,这不需要这样。例如,生成WCF服务描述文件的另一种有效方式是这样的:

<%@ ServiceHost Language="C#" Debug="true" Service="Sample.AccountService"   %>
<%@ Assembly Name="Sample.AccountService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"  %>

使用“Assembly”指令,不必指定CodeBehind目标。如果WCF应用程序的目的(与WCF站点(也是Visual Studio选项)相比)在生产服务器上没有源代码,那么为什么不生成服务定义文件,如上面的上一个示例所示?

允许这种明显矛盾的理由是什么?

1 个答案:

答案 0 :(得分:2)

  

您希望避免将源代码放在生产服务器上。

这是指使用非编译代码的能力。使用网站,您可以沿 aspx 文件复制 aspx.cs aspx.vb 文件(以明文形式)让他们跑。您也可以用明文修改它们,因为它们没有编译。

Web应用程序不同,因为必须编译,源代码存在于DLL中。