小编fyj*_*ham的帖子

在IIS7中重新部署ASP.NET站点,而不使用正在干扰的文件

我们目前有一个进程可以重新部署ASP.NET网站.代码本身就是一个ASP.NET应用程序.当前的方法已经工作了一段时间,只是循环遍历一个文件夹中的所有文件,并将它们复制到webroot中文件的顶部.

出现的问题是偶尔文件最终被使用,因此无法复制.这在过去是断断续续的,无关紧要,但在我们的一些较高流量站点,它现在大部分时间都会发生.

我想知道是否有人有一个解决方法或替代方法,我没有想到.目前我的想法是:

  1. 只需重试每个文件,直到它工作.这会导致错误很短的时间虽然不是那么好.
  2. 部署到新文件夹并将IIS的webroot更新到新文件夹.我不确定如何以管理员身份运行应用程序并运行批处理文件,这是非常不整洁的.

有没有人知道最好的方法是什么,或者如果没有像拥有管理员权限的用户那样运行发布应用程序就可以做#2(愿意授予它特殊权限,但我宁愿不要管理员)?

编辑
基础架构的澄清......我们在NLB中有2个IIS 7 Web服务器从共享NAS运行他们的webroots(更清楚的是,他们在NAS上使用完全相同的webroot).我们进行了大量的部署,以至于任何我们无法实现自动化的方法都无法实现.

c# asp.net iis iis-7

8
推荐指数
1
解决办法
2217
查看次数

使用Entity Framework 4以编程方式读取外键元数据

有谁知道如何从edmx生成的实体框架中获取架构信息?

具体来说,我要设法穿越了,我目前没有实例的实体的外键,并获得它的外键关系,我想通过反射在会一般适用于任何一种方式来做到这一点每次都没有自定义代码的实体类.

EG:我的架构有2个类,User和Group.我有数字"42",我知道,从"用户"实体"的GroupId"属性来了,但此刻我不能工作,如何检测到的"用户"外键本"的GroupId"属性"Group"实体由它的"GroupId"属性组成.

c# entity-framework-4

8
推荐指数
2
解决办法
9989
查看次数

仅当文件不存在时才会触发HttpHandler

我正在尝试创建一个HTTP处理程序来处理对文件夹的所有请求,但我只想在请求的文件不存在时触发它(EG:请求来自文件X,如果X存在我想要服务文件,否则处理程序应该处理它).

这些文件只是静态内容,而不是脚本本身,我认为它使它更容易但我似乎无法找到任何可以做到这一点的任何东西......任何人都有任何想法?我认为它可以完成,因为IIS7重写模块可以管理它,但我看不出如何...

编辑只是为了澄清......处理程序是典型的情况,它不是错误处理例程,而是实际提供适当的内容.我只是希望能够将新文件作为单独的东西添加到文件夹中,或者作为处理程序将提供的内容的重载.

c# asp.net iis-7 httphandler

7
推荐指数
2
解决办法
3292
查看次数

在Lucene.NET索引中存储关系数据

我目前正在尝试在大型数据库上实现基于Lucene.NET的搜索,并且我试图搜索基本上是关系数据的问题.

在高级别,我正在尝试搜索的数据被分组,每个项目属于1到3个组.然后,我需要能够搜索组合组中的所有项目(EG:每个项目同时属于组A和组B).

这些分组中的每一个都有我正在搜索的数据中存在的ID和描述,但描述可能是彼此的子字符串(EG:一个名为"Stuff"的组和另一个"其他东西"),我不知道我想匹配具有我正在寻找的子字符串的类别.

我一直在考虑在不进行过滤的情况下将数据拉回来然后过滤ID,但出于性能原因,我打算对从Lucene返回的数据进行分页.我还考虑过将ID放在空格上并在场上进行文本搜索,但这似乎完全是黑客攻击......

有谁知道如何在Lucene.NET中最好地处理这种搜索?(只是在有人说我使用错误的工具之前澄清一下,这只是一组较大的过滤器的一部分,包括全文搜索.如果你仍然认为我使用了错误的工具,虽然我喜欢听听正确的是什么)

c# search lucene.net

6
推荐指数
1
解决办法
1762
查看次数

打破asp.net Web应用程序

希望收集关于如何分割Web应用程序(或者可能是Web应用程序集)的一些观点(项目方面)...基本上整个事情将是一个大型站点,但问题出现是因为它有一个各种模块,每个模块都有自己的开发/发布周期.

出现的问题是,在尝试使会话在站点之间共享并在DLL中嵌入共享资源但将它们保持为一个大项目时,将它们拆分成为一个令人头痛的问题,从源代码控制的角度来看是一场噩梦.

我能想到的可行方法是:

  1. 有一个应用程序和分支像疯狂的每个模块的工作:在基本的风格基础上,这似乎是正确的,但它将是很多分支和合并分支在所有的时间将是一个噩梦......
  2. 使它们成为所有单独的应用程序:缺点是它们共享其母版页和许多自定义控件(在ascx中实现).我知道如何将它们放在DLL中(使用虚拟路径提供程序),但这是一个相当混乱的解决方案.最重要的是在应用程序之间来回传递会话本质上构建一个自制会话解决方案......

我试图找出我能做但失败的另一件事是在某种程度上在csproj中有一个"虚拟文件夹",例如"ModuleA"文件夹实际映射到"../../../ModuleA /树干/".我相信没有使用某种预构建脚本就无法做到这一点,但我希望能在Visual Studio中实际加载一些东西,所以我觉得这个想法是不行的......

有没有人对我应该采取哪种方式有任何建议(无论是上述之一还是我没有考虑过的事情)?想要确保我不会在这里拍摄自己的脚,因为它可能是一个长期项目,有很多未来的增强/维护......

c# svn asp.net

6
推荐指数
1
解决办法
895
查看次数

软件NLB的IIS7群集上的HTTPS的多个证书

我们目前正在尝试使用多个证书设置HTTPS.我们取得了一些有限的成功,但我们得到了一些我无法理解的结果......

基本上我们的NLB上有两台服务器(10.0.51.51和10.0.51.52),两台IP分配给我们的NLB(10.0.51.2和10.0.51.4),我们有IIS监听这两个IP,并使用不同的通配符证书(To避免给出公共IP,让我们说A:443路由到10.0.51.2:443和B:443路由到10.0.51.4:443).我们还有一个使用端口地址转换的Cisco路由器将端口443从两个外部IP路由到这些内部NLB IP.

奇怪的是,如果我们请求A:443或B:443,这是有效的,但如果你在10.0.51.51:443,10.0.51.52:443,10.0.51.2:443或10.0.51.4:443内部进行,你总是会得到相同的SSL证书.此证书过去已分配给*:443但我们已确保在IIS中不再定义*绑定.

当我在修剪掉所有不相关的东西后运行"netsh http show sslcert"时:

IP:port                 : 0.0.0.0:443 
Certificate Hash        : <Removed: Cert 1>

IP:port                 : 10.0.51.2:446 
Certificate Hash        : <Removed: Cert 3 - Another site>

IP:port                 : 10.0.51.3:446 
Certificate Hash        : <Removed: Cert 3 - Another site>

IP:port                 : 10.0.51.4:443 
Certificate Hash        : <Removed: Cert 2>
Run Code Online (Sandbox Code Playgroud)

这告诉我*绑定仍在那里,这有点奇怪,但我不明白为什么会阻止对方工作(或者更奇怪的是为什么通过路由器的请求会起作用).

这让我想知道它是否真的将请求视为机器的IP而不是NLB IP,但不幸的是我们的开发环境只是一个服务器,这可以减少我可以采取的试验/错误的数量(因为我可以测试on是一个实时环境),没有说服管理层为测试环境购买更多服务器 - 这是我正在尝试的.

有谁有想法吗:

  1. 为什么内部和路由器之间存在差异?
  2. 为什么内部请求获得错误的证书?
  3. 我如何解决这个问题,以便我们在双方都能得到同样的行为?

https networking iis-7 ssl-certificate

4
推荐指数
1
解决办法
3611
查看次数

MVC路由在根处拾取区域控制器

我在区域内的控制器遇到困难时,区域内的路由会回应请求.所以我有这样的设置(额外的东西削减):

/Areas/Security/Controllers/MembersController.cs
/Areas/Security/SecurityAreaRegistration.cs
/Controllers/HomeController.cs
Run Code Online (Sandbox Code Playgroud)

我有我的安全区域定义:

namespace MyApp.Web.Areas.Security
{
    public class SecurityAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Security";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Security_default",
                "Security/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的全球路由规则:

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{*robotstxt}", new { robotstxt = @"(.*/)?robots.txt(/.*)?" });
        routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-mvc-4

4
推荐指数
1
解决办法
1091
查看次数