小编And*_*ker的帖子

Windows 8显然从压缩的HTTP响应中删除了内容编码头

我不完全确定这是否属于SO,但我不知道还有什么要问的.

当我检查我的网络应用程序的加载速度时,我注意到显然没有HTTP响应(无论什么类型 - html,css,js)是压缩gzip/deflate.也就是说,任何请求中都不存在像"Content-Encoding:gzip"这样的响应标头,并且浏览器报告资源未被压缩.

  • 在多种浏览器中测试和确认(IE10,FF 17,Chrome 23,Opera 12.10,Safari 5.x)
  • 在运行Windows 8 Pro的两台计算机上测试并确认
  • 使用Fiddler进行双重检查 - 响应未压缩且不包含内容编码标头
  • 这不只是发生于我的网络应用程序,没有我测试的其他网站出现发送压缩响应(根据浏览器)
  • 在Windows 7上,响应压缩并带有所有标头
  • HTTPS响应压缩

以下是响应标头的示例(请注意缺少内容编码标头): 客户端计算机上的响应头

我还检查了服务器端.服务器正在运行Windows Server 2008 R2/IIS 7.5.我使用Failed Request Tracing查找服务器发送的内容.资源似乎是压缩的:

服务器端压缩

此外,服务器似乎发送正确的标头:

压缩标头

我的结论是:必须是Windows 8谁在这里进行干预.显然它修改了HTTP响应.我想Windows 8正在接收压缩响应,对其进行解压缩,删除内容编码头并将修改后的响应传递到管道下方.

现在我的问题:

  • 任何人都可以确认Windows 8修改HTTP响应并且它按照我描述的方式工作吗?
  • 有没有办法监控甚至禁用此行为?

提前感谢您的回答.

问候,安德烈


更新:我使用Wireshark查看到达客户端的内容.正如我所料,资源被压缩,内容编码头仍然存在.下图显示了wireshark协议,右下角显示了Chrome收到的响应.

Wireshark的

这证实了我的假设,即Windows 8正在介入.

http http-compression http-headers windows-8

12
推荐指数
1
解决办法
2520
查看次数

查询在客户端应用程序中占用很长时间,但在SQL Server Management Studio中速度很快

我正在开发一个存储图像和相关元数据的应用程序.我在使用NHibernate执行某个查询时遇到了问题.查询花费了太长时间(在我的机器上大约31秒),尽管在SQL Server Management Studio中执行时相同的查询只需要几分之一秒.

我已经将问题简化并解决了一个小的测试应用程序:

实体:

标记,由Id组成(字符串,标记值本身)

public class Tag
{
    public virtual string Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

图像,包括Id(int),Name(字符串)和标签(多对多,Tag实例集)

public class Image
{
    private Iesi.Collections.Generic.ISet<Tag> tags = new HashedSet<Tag>();

    public virtual int Id { get; set; }

    public virtual string Name { get; set; }

    public virtual IEnumerable<Tag> Tags
    {
        get { return tags; }
    }

    public virtual void AddTag(Tag tag)
    {
        tags.Add(tag);
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用"按代码映射"使用以下映射:

public class TagMapping : ClassMapping<Tag>
{
    public TagMapping() …
Run Code Online (Sandbox Code Playgroud)

sql sql-server-2008 database-performance

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

如何旋转4x4矩阵(C#/ XNA)

我有一个[4,4]
X 阵列是唯一一个我"知道"的,其余的是用简单的双循环计算的.

x 0 0 0
0 0 1 0
0 1 1 0
0 1 0 0
Run Code Online (Sandbox Code Playgroud)

我想要一个采用这个数组的函数,并将其旋转90度+/ - 而x的位置保持不变.(它应该是俄罗斯方块)

x 0 0 0
1 1 0 0
0 1 1 0
0 0 0 0
Run Code Online (Sandbox Code Playgroud)

我知道某些方法来对这些排列进行硬编码,但这对我来说什么都不会学到什么,坦率地说这很无聊.

非常感谢帮助:>

c# xna rotation matrix

7
推荐指数
1
解决办法
1049
查看次数

Autofac:有什么办法可以解决最深层的范围?

在过去几年中使用Ninject,Castle Windsor和其他IoC容器之后,我目前正在一个新的ASP.NET MVC项目中尝试使用Autofac。因此,尽管我大致了解IoC容器,但我对Autofac还是陌生的,我仍在寻找一些最佳实践。

当前,我正在尝试找出是否有一种方法可以解决最内层的嵌套作用域。

我遇到以下情况:注册为SingleInstance()的组件具有创建嵌套生存期范围的方法,该方法提供配置操作以将某些组件配置为InstancePerLifetimeScope,并在此嵌套范围内解析已注册的组件以执行有用的操作,像这样:

ILifetimeScope currentScope = ???;

using (var scope = currentScope.BeginLifetimeScope(cb => {
  cb.RegisterType<X>().InstancePerLifetimeScope();
  // ...
}))
{
    var comp = scope.Resolve<X>();
    // ...
}
Run Code Online (Sandbox Code Playgroud)

问题是我希望currentScope成为最内部的生存期范围,因为我知道X取决于最内部的范围内的组件。在最简单的情况下,例如当前请求生存期范围。我当然可以通过AutofacDependencyResolver.Current.RequestLifetimeScope来获取它,但是我不想使用它,因为它并不是很好的测试工具。而且,该生存期范围不一定是最内层的。

因此,有没有办法找到给定的最内部生命周期范围,例如根容器或其他ILifetimeScope?

asp.net-mvc ninject autofac asp.net-mvc-3

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

需要不区分大小写的排序规则,其中 ss != ß

对于在 SQL Server Express 2012 上运行的数据库中的特定列,我需要在比较字符串时将 ss 和 ß 视为不同的排序规则。此外,ä 和 ae、ö 和 oe 以及 ü 和 ue 应该分别被认为是不同的。Latin1_General_CI_AS 提供了后者,但不区分 ss 和 ß。也就是说,WHERE ThatColumn = 'Fass'会同时产生FassFaß

我会简单地坚持 BIN/BIN2,但我需要不区分大小写。如果没有其他工作,我将不得不使用 Latin1_General_BIN/Latin1_General_BIN2 并确保自己的所有内容都是大写或小写。这将意味着更多的工作,因为我还需要能够检索具有适当大小写的版本。

但是,如果有符合我需要的整理,请告诉我。提前致谢!

更新:有关要求的更多信息:数据库包含来自仅支持 ASCII 字符的旧系统的个人姓名。也就是说,像 Müller 和 Faß 这样的名字被存储为 Mueller 和 Fass。在新系统中,用户将具有重命名这些人的功能,例如将“Mueller”重命名为“Müller”。要找到需要重命名的实体,我需要搜索包含例如“Fass”的行。但是现在查询也返回“Faß”,这不是我想要的。我仍然需要/想要不区分大小写,因为用户应该能够搜索“fass”并仍然得到“Fass”。

该系统还有更多内容,但我可以肯定地说,我需要区分 ss 和 ß、ä 和 ae 等。

sql-server collation

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

我可以安全地使用NHibernate中实体代理接口的基本类型进行查询吗?

我目前处于多个相当复杂的系统的设计阶段,这些系统具有共同的功能(例如,它们都具有客户关系管理(CRM)和销售功能).因此,我试图提取域的公共部分并在两个应用程序中重用它.

假设我有应用程序A和应用程序B,都使用CRM功能.在大多数情况下,CRM功能是相同的,但两个应用程序都喜欢增加与CRM相关的一些东西.

我想创建一个实现CRM系统基本版本的库,例如客户被抽象化

interface ICustomer {
  string CustomerNumber {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

并且基础库具有ICustomer的基本实现

class Customer: ICustomer
Run Code Online (Sandbox Code Playgroud)

应用程序A现在可以增加这个:

interface IACustomer : ICustomer {
    bool ReceivesNewsletter {get;set;}
}

class ACustomer : Customer, IACustomer {
   ...
}
Run Code Online (Sandbox Code Playgroud)

同样,B有自己的变体:

interface IBCustomer : ICustomer {
    string NickName {get;set;}
}

class BCustomer : Customer, IBCustomer {
    ....
}
Run Code Online (Sandbox Code Playgroud)

出于抽象的目的,我从不在基础库中实例化具体类型,而是使用工厂或DI容器,例如:

interface ICrmFactory {
    ICustomer CreateCustomer();
}
Run Code Online (Sandbox Code Playgroud)

A和B相应地实施工厂,以便分别产生ACustomers或BCustomer.

这是我的意思的UML图(应用程序B未显示): 应用设计

对于持久性,我使用NHibernate.A和B都提供自己的映射(按代码映射)以包含额外的属性.此外,A将IACustomer定义为ACustomer的代理类型,B将IBCustomer定义为BCustomer的代理类型.

我现在可以使用NHibernate来处理A和B中的实体,例如在A中

session.QueryOver<ACustomer>()
    .Where(c=>c.ReceivesNewsletter)
    .List()
Run Code Online (Sandbox Code Playgroud)

现在让我们说我想在基础库中对客户做一些事情(例如在某种服务对象中).我只是原型一个非常简单的版本,到目前为止这似乎工作正常:

session.QueryOver<ICustomer>()
   .Where(c => c.CustomerNumber == "1234ABC")
   .List()
Run Code Online (Sandbox Code Playgroud)

也就是说,我可以在QueryOver中使用特定实体的代理类型的基类,并且NHibernate创建正确的查询,例如在A:

SELECT
    this_.Id as Id0_0_,
    this_.CustomerNumber as Customer2_0_0_, …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate

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