小编Ani*_*esh的帖子

构建托管/ SAAS应用程序时,如果允许客户进行自定义,您如何管理多个版本?

让我们假设您正在构建一个Calculator应用程序.您将允许客户使用自己的徽标和CSS样式表自定义此计算器.客户将其域名指向您的托管计算器,该应用程序将为每个客户提供正确的主题.例如:

  • www.AcmeCalculator.com将提供带有Acme徽标的计算器,以及他们创造的平淡企业风格.
  • www.HellzCalc.com将通过一些Hell's Angels骑车标志和他们创造的黑色血红色主题来为计算器提供服务.

你已经推出了计算器1.0,并且每个人都已经编写了他们的样式来处理这个版本.

下个月你准备发布计算器1.1,它增加了一个新功能,让我们说"科学模式",它要求你添加一些新的UI - 在这个例子中的HTML - 组件.这意味着如果您推出1.1,您将打破一些客户的风格.

我提出的最佳解决方案是保持应用程序的多个版本运行.例如:

  • www.AcmeCalculator.com解析为您的应用服务器,该服务器检查Acme当前所使用的版本,并转发至www.AcmeCalculator.com/1.0
  • www.HellzCalc.com解析为您的应用服务器,它注意到它们在新的1.1版本上运行,因为他们更新了他们的CSS以处理新版本并点击了"完成升级"按钮或其他任何内容,所以他们得到了重定向到" www.HellzCalc.com/1.1

这个系统的一个问题是,你将不可避免地拥有从不投资升级的懒惰客户.你将会巧妙地运行200个版本,尝试修复每个版本中的错误,基本上是疯了.

一种解决方案是使用每月托管费的一部分来雇用"UI迁移团队",该团队将是一组设计师,他们唯一的工作就是不断地将客户端放在运行最旧版本的队列中并调整他们的CSS并验证他们在最新版本上运行.这将允许您同时仅支持X版本,其中X是您在UI迁移团队中投入多少资金的函数,添加资源以加速或减慢它们.

同样的想法适用于数据库更改:计算器1.0和1.1在数据库1.0上运行,但计算器1.2在数据库1.1等上运行.您可以添加具有版本名称的模式,并使用类似的"数据迁移团队"来移动数据架构1.0到架构1.1,最后在没有(app)客户端时删除架构1.0.

我确定此类问题已经出现过,我想看看其他人是如何解决的.也许甚至有一个"最佳实践".

versioning saas hosted-app release-management

5
推荐指数
1
解决办法
2037
查看次数

以列表形式显示视图中多个表的数据 - ASP.Net MVC

我有以下两个表(基本大纲):

Tbl_CategoryType

ID LevelID描述

Tbl_Levels ID名称

基本上,我想在Tbl_CategoryType表中提供所有信息,同时根据Tbl_CategoryType.LevelID号引用Tbl_Levels.Name数据.

我尝试在我的存储库中使用连接,如下所示;

public IQueryable GetAllTypesInCategory(int CatID)
{
     return (from x in DBEntities.LU_LST_CategoryTypeSet
             where x.CategoryID == CatID && x.Enabled == 1
             join y in DBEntities.LU_LST_LevelSet on x.LevelID equals y.ID
             select new {x, y});
}
Run Code Online (Sandbox Code Playgroud)

但是,当我调用该方法时,没有类型我可以将其分配给它,因为它不适合类别或级别的类型.

我假设我需要通过自定义视图模型执行此操作,但无法弄清楚步骤.

提前致谢

asp.net-mvc linq-to-entities viewmodel

5
推荐指数
1
解决办法
6716
查看次数

Android:LinearLayout中的中心ImageButton

如何将ImageButton置于此LinearLayout中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/main"
>
Run Code Online (Sandbox Code Playgroud)

的ImageButton

              <ImageButton android:id="@+id/btnBut"
                      android:background="@drawable/button"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)

我不想使用固定尺寸.

谢谢

android

5
推荐指数
2
解决办法
2万
查看次数

ORIGINAL_LOGIN和SYSTEM_USER函数用于审计?

我正在实现一个插入的触发器,我正在考虑使用ORIGINAL_LOGIN函数来捕获当前正在执行的用户.我想知道使用ORIGINAL_LOGIN进行审计的利弊.在什么情况下SYSTEM_USER提供了更好的ORIGINAL_LOGIN替代方案?

sql-server triggers auditing

5
推荐指数
1
解决办法
1628
查看次数

如何自动执行自定义命令提示符的过程?

我把大部分时间都花在命令行(XP/7)上,总是发现自己根据自己的喜好自定义命令提示符.这适用于cmd和powershell提示符.

Width: 140
Height: 40
Left: -4
Top: 20
Font: Lucida Console
Font Size: 16
Text Color: RGB(100,150,200)
QuickEdit Mode: Enabled
Run Code Online (Sandbox Code Playgroud)

每当我在新服务器上时,我都需要重新做这件事.如何通过将这些参数放在批处理文件或PowerShell脚本中来自动执行此过程?

powershell batch-file command-prompt

5
推荐指数
1
解决办法
3338
查看次数

如何合并/合并两个SqlDataReader对象

我正在研究一个SQL Server监视项目。在此,我想从计算机上安装的所有SQL Server实例中获取数据。为此,我编写了一个CLR存储过程,其中数据来自两个不同的SqlDataReader对象,并且我想合并这两个datareder对象。

是否可以合并两个SQLdatareader对象?

以下是我面临此问题的情况:

SqlConnection conn = new SqlConnection("ConnectionSting of 1st SQLServerInstance")
string query = "select dbid,uid,cpu from [master].[sys].sysprocesses";

SqlCommand SelectCmmand = new SqlCommand(query, conn);            
SqlDataReader rd1;            
conn.Open();
rd1 = SelectCmmand.ExecuteReader();
conn.Close();

conn = new SqlConnection("ConnectionSting of 2nd SQLServerInstance")

SqlCommand SelectCmmand = new SqlCommand(query, conn);            
SqlDataReader rd2;            
conn.Open();
rd2 = SelectCmmand.ExecuteReader();
conn.Close();

SqlPipe sp;
sp = SqlContext.Pipe;
sp.Send(?????);
Run Code Online (Sandbox Code Playgroud)

现在,sp.Send(??)方法希望将SQLDataReader对象作为参数,在这里我要发送从两个不同的连接字符串获取的上述数据。

那么,我应该如何合并/合并rd1和rd2?

c# sql-server ado.net

5
推荐指数
1
解决办法
4948
查看次数

WCF AddressAccessDeniedException

我是WCF的新手.

我创建了一个正在运行的WCF服务,但是当我尝试在控制台应用程序中托管它时,它给了我一个例外:

AddressAccessDeniedException

host.AddServiceEndpoint(typeof(ISampleService), new BasicHttpBinding(),"http://localhost:8080/evals/basic");
Run Code Online (Sandbox Code Playgroud)

c# wcf

5
推荐指数
1
解决办法
2006
查看次数

TypeInitializationException:'vService.CheckService'的类型初始值设定项引发了异常

我在调用时从WCF服务收到FaultException,如下所示:

2012-04-02 16:26:00.3593|Error|System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: The type initializer for 'vService.CheckService' threw an exception. (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.TypeInitializationException: The type initializer for 'vService.CheckService' threw an exception. ----> System.NullReferenceException: Object reference not set to an instance of an object.
   at vService.CheckService..cctor() in d:\working\code\VioletServer\vService\CheckService.cs:line 14
   --- End of inner ExceptionDetail stack trace ---
   at vService.CheckService..ctor()
   at CreatevService.CheckService()
   at System.ServiceModel.Dispatcher.InstanceProvider.GetInstance(InstanceContext instanceContext, Message message)
   at System.ServiceModel.Dispatcher.InstanceBehavior.GetInstance(InstanceContext instanceContext, Message request)
   at System.ServiceModel.InstanceContext.GetServiceInstance(Message message)
   at System.ServiceModel.Dispatcher.InstanceBehavior.EnsureServiceInstance(MessageRpc& rpc)
   at …
Run Code Online (Sandbox Code Playgroud)

c# wcf faultexception

5
推荐指数
1
解决办法
1万
查看次数

C# 相当于 Python repr()

是否有像 Python 的 repr() 这样的 C# 方法来获取对象的真实表示?假设我们有:

string identifier = "22\n44";
Console.WriteLine(identifier);
Run Code Online (Sandbox Code Playgroud)

这将返回

22
44

有没有办法得到

"22\n44"
Run Code Online (Sandbox Code Playgroud)

在 Python 中这很容易。我们只能做repr("22\n44")

我想到这个问题是因为我试图转换"2244"'2244'使用

var identifier = "2244";
identifier = identifier.Replace("\"", "'");
Console.WriteLine(identifier);
Run Code Online (Sandbox Code Playgroud)

输出只是2244,因为双引号是为了我们的目的。但就我而言,我这样做是为了得到我想要的:

identifier = string.Format("'{0}'", identifier);
Run Code Online (Sandbox Code Playgroud)

因为最初数据库接收查询为IN ("2244")而不是IN ('2244')并抛出无效数字错误。

c# python

5
推荐指数
1
解决办法
2646
查看次数

如何正确测试返回json以获取非null响应的API控制器?

我有这个测试方法来测试API控制器,它返回一个非空响应的JSON字符串.

[TestClass]
public class TransactionsTests
{
    [TestMethod]
    public void ColorPerformance_GetChartData_NotNullResponse_Test()
    {
        // Arrange
        string quality = null, cars = null, year = "2015";

        var listColorPerformanceChartData = new List<ColorPerformanceChartData>();
        var mockRepository = new Mock<IColorPerformanceRepository>();
        mockRepository.Setup(x => x.GetChartData(quality, cars, year))
            .Returns(listColorPerformanceChartData);

        var controller = new ColorPerformanceController(mockRepository.Object);

        // Act
        IHttpActionResult actionResult = controller.GetChartData(quality, cars, year);
        var contentResult = actionResult as OkNegotiatedContentResult<object>;

        // Assert
        Assert.IsNotNull(contentResult);
        Assert.IsNotNull(contentResult.Content);
    }
}
Run Code Online (Sandbox Code Playgroud)

传入的测试contentResult不是空的.但是,由于以下原因,我不确定测试是否正确编写:

  1. contentResult.Content有空数据,因为没有从_repository.GetChartData()方法返回的数据,但是不是空的,因为构造的json仍然如下:

{ categories = {int[0]}, series = { name = …

c# json mstest moq asp.net-web-api2

5
推荐指数
1
解决办法
7832
查看次数