我创建了一个基于MVC 5的WebAPI控制器 - 为我们的客户提供不同的文件.访问文件的工具也是自编写的 - 基于.NET HttpClient - 但这是另一个故事.
在下载控制器的第一个版本,我使用的生成机制来提供像文件这样
但是这个机制在我的iis上崩溃了4GB以上的文件.
所以我终于来到了这段代码:
public class DownloadController : ApiController
{
public async Task Get(long id)
{
string fullFilePath = GetFilePathById(id);
string returnFileName = fullFilePath.Split('\\').Last();
FileInfo path = new FileInfo(fullFilePath);
HttpContext.Current.Response.ContentType = "application/zip";
HttpContext.Current.Response.AddHeader("Content-Length", path.Length.ToString());
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + returnFileName);
HttpContext.Current.Response.Flush();
try
{
byte[] buffer = new byte[4096];
using (FileStream fs = path.OpenRead())
{
using (BufferedStream bs = new BufferedStream(fs, 524288))
{
int count = 0;
while ((count = bs.Read(buffer, 0, buffer.Length)) …Run Code Online (Sandbox Code Playgroud) 我正在开发一个自定义 ProtoBufFormatter (:MediaTypeFormatter),它能够将自己的类型动态注册到用于序列化/反序列化的 RuntimeTypeModel。
为了减少对 try{}catch{} 块的需求,最好在将已支持的类型添加到 RuntimeTypeModel 之前过滤掉它们。自述文件仅提供默认支持的“模糊”列表类型,并且方法 Model.GetTypes() 仅返回手动添加到当前模型的类型列表。
自述文件: https: //github.com/mgravell/protobuf-net
我正在使用 protobuf-net 2.4.0
所以我想知道是否有任何简单的方法来检查当前 RuntimeTypeModel 是否已支持某种类型?目前我正在使用类似的东西来预过滤类型:
private bool IsSimpleType(Type type)
{
return
type.IsPrimitive ||
_additionalSimpleTypes.Contains(type) ||
Convert.GetTypeCode(type) != TypeCode.Object ||
(type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>) && IsSimpleType(type.GetGenericArguments()[0]));
}
private Type[] _additionalSimpleTypes = new Type[]
{
typeof(Enum),
typeof(String),
typeof(String[]),
typeof(Decimal),
typeof(DateTime),
typeof(DateTimeOffset),
typeof(TimeSpan),
typeof(Guid),
typeof(Uri),
typeof(Byte),
typeof(Byte[]),
typeof(Char),
typeof(Boolean),
typeof(Object),
typeof(Version)
};
private Type[] _listTypes = new Type[]
{
typeof(Enum),
typeof(IEnumerable<>),
typeof(List<>),
typeof(IList<>)
};
Run Code Online (Sandbox Code Playgroud) 现在我们正在为即将到来的项目评估 SignalR。我们希望使用 SignalR 的“永远在线”功能来获得连接 C# 客户端的在线状态。SignalR 通道的主要工作是获取状态并不时将一些 ID 从服务器推送到客户端。
据我研究,SignalR 将为此目的做得很好,因为我们不打算像那些股票示例那样使用该通道进行大量数据传输。
但有一个部分我找不到任何信息:
空闲的 SignalR (WebSocket) 通道会产生多少流量?在生产中,我们将有大约 10.000 个客户端连接到一台服务器(主要是内部公司网络)。有没有像“每个客户端在空闲时产生大约 10kbps 的流量”这样的经验法则?在我有 3-4 个客户端的实验室环境中,我无法创建可测量的流量。
来自生产环境的任何提示都会很棒。
我正在使用 C# ECDiffieHellmanCng 类,并使用示例中的代码发现了一个(在我看来奇怪的)行为:任何项目中生成的每个公钥都是相同的!这是正确且理想的行为吗?
例子:
using (ECDiffieHellmanCng bob = new ECDiffieHellmanCng())
{
bob.KeyDerivationFunction = ECDiffieHellmanKeyDerivationFunction.Hash;
bob.HashAlgorithm = CngAlgorithm.Sha256;
Trace.WriteLine(Encoding.UTF8.GetString(bob.PublicKey.ToByteArray()));
}
Run Code Online (Sandbox Code Playgroud)
跟踪始终将“ECK5B”作为输出。使用不同的构造函数只会使输出略有不同,但事实并非如此,它始终是相同的。我是否误解了什么,这个结果符合预期,并且没有机会提供随机公钥?我只是认为系统会使用更多的随机性。