小编Mar*_*cze的帖子

ZipArchive创建无效的ZIP文件

我试图从一个条目的代码创建一个新的ZIP包,并将ZIP包保存到文件.我试图用System.IO.Compression.ZipArchive类来实现这一点.我正在使用以下代码创建ZIP包:

using (MemoryStream zipStream = new MemoryStream())
{
    using (ZipArchive zip = new ZipArchive(zipStream, ZipArchiveMode.Create))
    {
        var entry = zip.CreateEntry("test.txt");
        using (StreamWriter sw = new StreamWriter(entry.Open()))
        {
            sw.WriteLine(
                "Etiam eros nunc, hendrerit nec malesuada vitae, pretium at ligula.");
        }
Run Code Online (Sandbox Code Playgroud)

然后我将ZIP保存到WinRT中的文件:

        var file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("test.zip", CreationCollisionOption.ReplaceExisting);
        zipStream.Position = 0;
        using (Stream s = await file.OpenStreamForWriteAsync())
        {
            zipStream.CopyTo(s);
        }
Run Code Online (Sandbox Code Playgroud)

或者在普通的.NET 4.5中:

        using (FileStream fs = new FileStream(@"C:\Temp\test.zip", FileMode.Create))
        {
            zipStream.Position = 0;
            zipStream.CopyTo(fs);
        }
Run Code Online (Sandbox Code Playgroud)

但是,我无法在Windows资源管理器,WinRAR等中打开生成的文件.(我检查生成的文件的大小是否与zipStream的长度匹配,因此流本身已正确保存到文件中.)
我是做错了什么或者ZipArchive类有问题吗?

.net c# ziparchive windows-8

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

密码更改后如何使OAuth令牌无效?

我们在Web Api项目中使用ASP.NET Identity SimpleAuthorizationServerProvider,我们使用OAuth-tokens来授权来自客户端的每个请求.(标记有时间和到期时间,我们不使用刷新令牌.)

当用户更改密码时,我想使他们可能拥有的令牌无效,可能在其他设备上.有没有办法明确这样做?我进行了实验,发现密码更改后现有令牌的运行没有任何问题,应该加以防范.

我考虑过将密码哈希或OAuth令牌中的部分哈希作为声明,并在OnAuthorization派生的AuthorizeAttribute过滤器的方法中验证.
这是解决问题的正确方法吗?

oauth asp.net-web-api asp.net-identity

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

如何在C++中创建不可变的结构?

来自C#背景,我习惯于使结构不可变的做法.
因此,当我开始使用C++进行编程时,我尝试对通常按值传递的类型执行相同的操作.

我有一个简单的结构,它代表一个自定义索引,只是包装一个整数.因为在C++中const关键字有点类似于readonlyC#,所以实现我的结构似乎是合理的:

struct MyIndex
{
    MyIndex(int value) :
        Value(value)
    {
    }

    const int Value;
};
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是这个结构的行为与C#中的不可变结构完全不同.不仅MyIndex不能修改变量的Value字段,而且任何现有MyIndex变量(局部变量或字段变量)都不能用另一个MyIndex-instance 替换.

所以下面的代码示例不能编译:

a)使用index作为循环变量.

MyIndex index(0);

while(someCondition)
{
    DoWork();

    index = MyIndex(index.Value + 1); // This does not compile!
}
Run Code Online (Sandbox Code Playgroud)

b)修改类型的成员字段 MyIndex

class MyClass
{
    MyIndex Index;

    void SetMyIndex(MyIndex index)
    {
        Index = index; // This does not compile!
    }
};
Run Code Online (Sandbox Code Playgroud)

这两个示例没有编译,构建错误是一样的:

错误C2582:'operator ='函数在'MyIndex'中不可用

这是什么原因?为什么不能将变量替换为另一个实例,尽管它们不是const?构建错误意味着什么是exaclty?那是什么operator =功能?

c++ immutability

18
推荐指数
1
解决办法
8383
查看次数

如何自定义OAuthAuthorizationServerProvider的错误消息?

我们正在使用OAuthAuthorizationServerProvider该类在我们的ASP.NET Web Api应用程序中进行授权.

如果提供的用户名和密码无效GrantResourceOwnerCredentials,则通话

context.SetError( "invalid_grant", "The user name or password is incorrect." );
Run Code Online (Sandbox Code Playgroud)

产生以下Json结果:

{
    "error": "invalid_grant",
    "error_description": "The user name or password is incorrect."
}
Run Code Online (Sandbox Code Playgroud)

有没有办法自定义此错误结果?
我想使其与API的其他部分中使用的默认错误消息格式一致:

{
    "message": "Some error occurred."
}
Run Code Online (Sandbox Code Playgroud)

这有可能实现OAuthAuthorizationServerProvider吗?

c# asp.net oauth asp.net-web-api

11
推荐指数
2
解决办法
6297
查看次数

如何解决Linux上的ASP.NET Core(Kubernetes)中的线程饥饿问题?

我正在Linux上运行ASP.NET Core API,在Google Cloud中的Kubernetes上运行.

这是一个具有高负载的API,并且在每次请求时它都在执行一个执行长(1-5秒)CPU密集型操作的库.

我看到的是,在部署之后,API可以正常工作一段时间,但是在10-20分钟后它变得无法响应,甚至健康检查端点(只返回硬编码200 OK)也会停止工作并超时.(这使得Kubernetes杀死了豆荚.)

有时我也会Heartbeat took longer than "00:00:01"在日志中看到臭名昭着的错误消息.

谷歌搜索这些现象指向我"线程饥饿",因此有太多的线程池线程启动,或太多的线程阻塞等待某事,所以池中没有任何线程可以拿起ASP.NET核心请求(因此甚至健康检查端点的超时).

解决此问题的最佳方法是什么?我开始监视由ThreadPool.GetMaxThreads和返回的数字ThreadPool.GetAvailableThreads,但它们保持不变(完成端口总是1000最大和可用,并且工作者总是32767).
我应该监控其他任何财产吗?

multithreading kubernetes kestrel-http-server asp.net-core

10
推荐指数
2
解决办法
2853
查看次数

如何解决不稳定且缓慢的Google云端存储响应时间问题?

我正在使用谷歌云存储来存储和检索一些文件,我的问题是我得到的响应时间不一致,有时甚至很慢.

我的应用程序是在Google容器引擎中运行的ASP.NET核心应用程序.Container Engine集群在europe-west1-c.云存储桶是位于该位置的多区域存储桶EU,它是一个安全存储桶(不可公开访问).我正在使用最新版本的官方Google.Cloud.Storage.V1SDK包来访问云存储.(我尝试了两个1.0.0和新的2.0.0-beta01.)我正在使用StorageClient对象的单例实例,它应该在引擎盖下进行连接池.

我正在测量并记录从云存储下载文件所需的时间,这是我所做的测量.

var sw = Stopwatch.CreateNew();

await client.DownloadObjectAsync(googleCloudOptions.StorageBucketName, filepath, ms);

sw.Stop();
Run Code Online (Sandbox Code Playgroud)

所以我在没有任何自己的应用程序逻辑的情况下直接测量SDK调用.

我在这个测量中获得的数字在平均时间内看起来像这样.

44ms
56ms
501ms
274ms
90ms
237ms
145ms
979ms
446ms
148ms
Run Code Online (Sandbox Code Playgroud)

你可以看到方差已经非常大了(并且响应时间通常非常缓慢).

但偶尔我会得到这样的响应时间(我见过的最慢的时间超过10秒).

172ms
4,348ms
72ms
51ms
179ms
2,508ms
2,592ms
100ms
Run Code Online (Sandbox Code Playgroud)

考虑到我正在下载的文件大小约为2 KB,而我的应用程序每秒执行的请求少于1个,并且我正在Google Cloud中运行我的应用程序,这真的很糟糕.我不认为桶没有被预热可能是一个问题,因为我主要是下载相同的少量文件,而且我每分钟至少要做几次请求.

有谁知道这种缓慢的原因是什么,或者我如何调查出了什么问题?

更新:按照@ jterrace的建议,我gsutil perfdiag在生产环境中运行,并在此处上传了终端输出和生成的json报告.

我还收集了一些测量值,在这里你可以看到过去7天的统计数据.

该图显示了有关云存储下载时间的统计信

因此,您可以看到缓慢的请求不会经常发生,但超过半秒的响应时间并不罕见,我们甚至每天都会有超过5秒的请求.

我想弄清楚的是我们是否做错了什么,或者这是云存储的预期,我们必须准备好能够处理这些缓慢的响应.

c# google-cloud-storage google-cloud-platform asp.net-core

9
推荐指数
1
解决办法
937
查看次数

如何使用ASP.NET 5(MVC 6)中的Response属性对Controller操作进行单元测试?

ASP.NET Core 1.0(MVC 6)项目中,我有一个Controller操作方法,我在其中使用该Response属性来设置标头:

[HttpGet]
public IActionResult Get()
{
    ...

    Response.Headers.Add("Location", location);

    ...
}
Run Code Online (Sandbox Code Playgroud)

我尝试为此操作方法实现单元测试,但该Response属性的值为null.

这在以前的ASP.NET版本中很容易解决,因为该Response属性具有setter,您可以HttpResponse在单元测试期间将其值设置为新实例.

但是在ASP.NET 5 Response中没有setter,只有一个getter.
如何Response在单元测试中设置值?

更新:只是说清楚:这个问题是关于ASP.NET Core 1.0.另一个链接为重复的问题是关于ASP.NET 4,从那以后Api发生了变化,所以那里的答案不适用于这个问题.

c# asp.net asp.net-core-mvc asp.net-core

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

移动构造函数(和其他)的正确实现是什么?

我有一个包含std :: vector的简单类,我希望在按值返回类时从移动语义(而不是RVO)中受益.

我通过以下方式实现了移动构造函数,复制构造函数和复制赋值运算符:

class A
{
    public:
        // MOVE-constructor.
        A(A&& other) :
            data(std::move(other.data))
        {
        }

        // COPY-constructor.
        A(const A& other) :
            data(other.data)
        {
        }

        // COPY-ASSIGNMENT operator.
        A& operator= (const A& other);
        {
            if(this != &other)
            {
                data = other.data;
            }

            return *this;
        }

    private:
        std::vector<int> data;
};
Run Code Online (Sandbox Code Playgroud)

上述实现是否正确?

还有一个问题:我是否必须实现这些成员中的任何一个,还是由编译器自动生成?我知道默认情况下会生成复制构造函数和复制赋值运算符,但编译器是否也可以自动生成移动构造函数?(我用MSVC和GCC编译这段代码.)

在此先感谢您的任何建议.(我知道已经存在一些类似的问题,但不是针对这种情况.)

c++ move-semantics c++11

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

如何在同一个Visual Studio项目中混合Node.js和Typescript?

Visual Studio有一个Typescript插件,用于使用Typescript语言开发应用程序.

还有用于VS 的Node.js工具,使用它可以创建和调试Node.js应用程序.

我尝试创建一个Node.js项目,但后来我无法添加Typescript文件,如果我手动添加它们,它们就不会被编译为javascript(无法将它们的Build操作设置为TypeScriptCompile.)
如果我创建了一个简单的Typescript项目,然后它没有用Node启动我的应用程序,因为它基本上只是一个ASP.Net Web项目.

是否有可能以某种方式创建一个同时使用Typescript和Node.js集成的VS项目?

javascript visual-studio node.js typescript ntvs

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

如何使用Ninject InRequestScope处理异步调用?

我们在ASP.NET Web Api应用程序中使用Ninject,我们将它们绑定在一起.这适用于我们的大多数请求,因为它们同步完成所有工作,因此在请求完成后可以安全地处理上下文.DbContextInRequestScope

但是,我们根据请求进行异步Web服务调用,它具有作为回调传递的continuation方法,并且该回调方法需要使用数据库上下文.但是我们的请求不应该等待异步服务调用完成,而是立即返回(这是一个明确的要求).

这是一个简化的情况示例.

public class MyController : ApiController
{
    private readonly MyDbContext dbContext;
    private readonly SomeWebService service;

    public MyController(MyDbContext dbContext, SomeWebService service)
    {
        this.dbContext = dbContext;
        this.service = service;
    }

    public IHttpActionResult MyActionWithAsyncCall()
    {
        // Doing stuff.

        // Calling webservice method, passing the Callback as the continuation.
        service.MethodWithCallback(param1, param2, this.Callback);

        // Returning without waiting for the service call to be completed.
        return Ok();
    }

    private void Callback()
    {
        // Trying to use …
Run Code Online (Sandbox Code Playgroud)

c# asp.net ninject asp.net-web-api

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