【问题标题】:Programmatically restarting IIS Hosted WCF service - change Bindings issue以编程方式重新启动 IIS 托管 WCF 服务 - 更改绑定问题
【发布时间】:2011-12-09 16:41:16
【问题描述】:

我遇到了这种不太好的情况。当 Web 应用程序启动时 - 我为我的服务设置了不同的路由,以便我的多用户应用程序的租户连接到:

private static void RegisterRoutes()
{
   // Setup URL's for each customer
   using (var cmc = new CoreModelContext())
   {
      foreach (var account in cmc.Accounts.Where(aa => aa.IsActive).ToList())
      {
         RouteTable.Routes.Add(
              new ServiceRoute(account.AccountId + "/mobile", 
                               new MyServiceHostFactory(), typeof(MobileService)));
      }
   }
}

所以,当我的站点/服务启动时 - 它会从数据库中获取所有帐户并设置路由。

这是一个单点故障。有时服务器以错误的顺序重新启动,并且如果 SQL Server 未启动 - 此服务以“奇怪”模式启动。

今天网络服务停止响应。我检查了日志 - IIS 按计划回收池(默认设置)并启动了不同的工作进程。有些东西没有点击和繁荣 - 服务器停止响应。路线未注册...

所以。我的问题是..如何以最好的方式解决它?我可以将路由放到配置文件中,但这意味着我必须在 2 个地方维护这些 id。可能没那么糟糕,但如果可能的话,我宁愿做不同的事情。

是否可以以编程方式尝试并重新启动池?当Application_Start 中抛出异常时会发生什么?现在我没有困住它。

【问题讨论】:

    标签: c# wcf iis wcf-binding


    【解决方案1】:

    不确定这是否是“修复”,但当我们遇到类似的依赖问题时,我们会确保其他依赖无法以“奇怪”模式成功启动。在这种情况下,如果 sql server 不可用,至少在生产中,我会严重关闭应用程序。不处理任何事情总比处理错误的事情要好得多。

    【讨论】:

    • 我 100% 同意你的看法。幸运的是,在我的情况下没有任何处理错误。那么,我该如何“硬”下来呢?理想情况下,我希望以 IIS 不断尝试的方式使应用程序启动失败,并且当与 SQL 的连接最终建立时,它会启动它
    • 当我无法启动时,我会抛出一个异常,因为我看不到 SQL。我的理解是未处理的异常应该杀死应用程序池并阻止它启动。另一个让我印象深刻的选择是某种离线监控过程。
    • 现在我没有捕获错误,显然这不起作用:(不需要离线监控,因为客户在它关闭 5 分钟后给我发电子邮件:-) 我只是不喜欢那些电子邮件在最不合适的时间
    猜你喜欢
    • 1970-01-01
    • 2013-07-18
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多