小编pet*_*snd的帖子

是否可以与System.Net.Http.HttpClient一起使用持久连接?

我使用作为自托管进程运行的Web API创建了REST资源.出于性能原因,我希望能够使用持久HTTP连接来调用它.我使用OWIN自托管.

我非常喜欢System.Net.Http.HttpClient中的GET,POST,PUT,DELETE的asnyc方法.它们很容易调用和处理 - 它们返回一个System.Threading.Tasks.Task,这对我正在尝试做的事情很方便.我更喜欢使用HttpClient来进行System.Net.HttpWebRequest.

我可能遗漏了一些东西,但我不清楚如何使用HttpClient创建持久连接.我正在挖掘System.Net.Http.HttpClientHandler和System.Net.Http.WebRequestHandler类,但到目前为止,我还没有找到持久连接的选项.Google找到了使用HttpWebRequest创建持久连接的各种示例.它有一个KeepAlive属性,可以设置为true.有没有办法用HttpClient设置它?

HttpClient的MSDN文档:

默认情况下,HttpWebRequest将用于向服务器发送请求.可以通过在其中一个构造函数重载中指定不同的通道来修改此行为,并将HttpMessageHandler实例作为参数.如果需要身份验证或缓存等功能,可以使用WebRequestHandler配置设置,并将实例传递给构造函数.可以使用HttpMessageHandler参数将返回的处理程序传递给构造函数重载之一.

有没有办法在底层的HttpWebRequest上设置KeepAlive功能?

MSDN文档还说:

HttpClient类实例充当发送HTTP请求的会话.HttpClient实例是应用于该实例执行的所有请求的设置集合.此外,每个HttpClient实例都使用自己的连接池,将其请求与其他HttpClient实例执行的请求隔离开来.

我是否可以从中了解到,当可以获得性能优势时,连接池将使用持久连接为我优化?如果我想在那里只与客户建立一个连接怎么办?

.net c# rest web-services asp.net-web-api

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

Windows上的fchown()似乎无法在C中实现

*更新*

答案非常有用,现在我的代码正在返回ERROR_SUCCESS.关键的变化似乎是转向使用SetKernelObjectSecurity().但是,现在我看到了一个不同的问题; 我的代码成功,但如果我查看文件系统或在代码中检查文件,它仍然有以前的所有者.

之前已经报道了SO,但没有一个令人满意的答案.

这是我的代码的公开要点.它增加了一些输出,所以你可以看到我在说什么.您应该能够将它添加到空的Visual Studio C++控制台项目并通过它进行调试.务必使用"以管理员身份运行"打开Visual Studio.

*第二次更新*

我刚刚在MSDN上找到了这个注释SetKernelObjectSecurity().

注意 在文件系统对象上设置安全描述符时,不应使用此函数.相反,使用SetSecurityInfoSetNamedSecurityInfo功能.

我不确定我是怎么错过的......它就在顶部.


*原始问题*

我需要fchown()在Windows上实现相同的功能,但经过相当多的研究和努力后,我一直无法使其工作. fchown()更改通过打开的文件描述符指定的文件的所有权.对于Windows,这可以是打开的文件描述符,也可以是HANDLE(您可以从另一个创建一个).似乎无论我尝试什么,我都会得到ERROR_ACCESS_DENIED.

我曾经尝试都SetSecurityInfo()SetUserObjectInfo().我可以使用相应的Get*函数从打开的文件描述符中获取所有权信息:GetSecurityInfo()GetUserObjectSecurity().

当我重新编写代码以使用SetNamedSecurityInfo()或者SetFileSecurity(),在指定文件名而不是打开HANDLE的情况下,一切正常.

我是否遇到过操作系统的低级文件系统访问控制规则?

是否无法在Windows上更改打开文件的所有权?

据我所知,当HANDLE打开时,我甚至无法更改DACL. 当我认为我已经保护文件但有人仍然有一个打开的HANDLE时,Windows是否只是试图阻止我的虚假安全感?

在我看来,如果我错过了某些东西,那可能就是我的呼唤方式CreateFile().

期待可能发布的一些答案:

(另外,请记住,我只需将Win32 API的对象版本替换为带有文件名的对象版本)

  • 我正在一个升级的过程中运行
  • 我打电话AdjustTokenPrivileges()给自己SE_TAKE_OWNERSHIP_NAME
  • 我已经通过DACL和我的进程令牌中的权限 - 我相信我作为具有足够权限的用户运行(否则为什么它会与文件名一起使用)
  • 我想明确地通过传递0到打开文件CreateFile()dwShareMode.

这是一些代码.我删除了所有错误处理,以便这个问题不会太长:

wchar_t* filename = L"test.txt";
HANDLE hFile = …
Run Code Online (Sandbox Code Playgroud)

c windows winapi

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

当复制因子= =簇大小时,Cassandra分区如何工作?

背景:

我是Cassandra的新手,仍然试图围绕内部工作.

我正在考虑在一个只有少量节点(少于10个,最常见的是3个)的应用程序中使用Cassandra.理想情况下,我的集群中的每个节点都将拥有所有应用程序数据的完整副本.所以,我正在考虑将复制因子设置为簇大小.添加其他节点时,我会更改键空间以增加复制因子设置(nodetool修复以确保它获取必要的数据).

我将使用NetworkTopologyStrategy进行复制,以利用有关数据中心的知识.

在这种情况下,分区实际上如何工作?我已经读过在Cassandra中形成环的节点和分区键的组合.如果我的所有节点都对每个数据"负责"而不管分区器计算的哈希值,我是否只有一个分区键的环?

这种类型的Cassandra部署是否有巨大的挫折?我猜测会在后台进行大量异步复制,因为数据传播到每个节点,但这是设计目标之一,所以我很好.

读取的一致性级别通常可能是"一"或"local_one".

写入的一致性级别通常为"2".

要回答的实际问题:

  1. 复制因子==群集大小是一个常见的(甚至是合理的)部署策略,除了一个群集的明显情况之外?
  2. 我实际上是否有一个分区的环,其中分区程序生成的所有可能值都转到一个分区?
  3. 每个节点都被认为对每一行数据都"负责"吗?
  4. 如果我使用"一"的写一致性,Cassandra总是将数据写入客户端联系的节点吗?
  5. 我不知道这个战略还有其他垮台吗?

replication partitioning distributed-system cassandra

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

从Powershell Invoke-RestMethod忽略自签名证书不起作用(它再次更改......)

使用标准解决方案忽略证书验证后,Invoke-RestMethod返回:

Invoke-RestMethod : A system error occurred and has been logged.  Please try again later or contact your administrator.
Run Code Online (Sandbox Code Playgroud)

我今天刚刚注意到这个失败,所以我认为它与Powershell更新有关.通过"标准解决方案"我的意思是:

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
Run Code Online (Sandbox Code Playgroud)

几个月前停止工作,并在C#类型中正确设置回调添加到Powershell(历史记录中的描述).

这是我的环境:

> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.15063.674
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.15063.674
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
Run Code Online (Sandbox Code Playgroud)

这是一个小历史,所以这个问题不仅仅是一个副本关闭.

历史

如果你谷歌或搜索StackOverflow你可以找到这个问题提出一些预制的回应.但是,今天我注意到所有的标准解决方案都不再适用了.

Powershell给出的标准错误是:

Invoke-RestMethod : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
Run Code Online (Sandbox Code Playgroud)

在所有论坛上给出的标准答案是在你打电话之前使用这个命令Invoke-RestMethod: …

rest powershell ssl windows-10 windows-server-2016

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

Visual Studio 11 ARM项目生成器失败

CMake版本2.8.9

我正在为Windows 8编写一个在平板电脑上运行的应用程序.我编写了一个包含大部分应用程序逻辑的底层C++库.我正在使用CMake来编译这个C++库,因为我想为未来的端口建立一个独立于平台的构建系统.

当我从命令行运行cmake.exe或使用cmake-gui时,我可以使用"Visual Studio 11"和"Visual Studio 11 Win64"生成器生成项目.但是,当我尝试使用"Visual Studio 11 ARM"生成器时,我收到以下错误:

CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:52 (MESSAGE):
  The C compiler "cl" is not able to compile a simple test program.
Run Code Online (Sandbox Code Playgroud)

原因在于更详细的输出:

1>------ Build started: Project: cmTryCompileExec2764216458, Configuration: Debug ARM ------

1>C:\Program Files
(x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Platforms\ARM\PlatformToolsets\v110\Microsoft.Cpp.ARM.v110.targets(36,5):
error MSB8022: Compiling Desktop applications for the ARM platform is not supported.

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)

默认情况下,"Visual Studio 11 ARM"生成器似乎不起作用,因为cl.exe不允许CMake测试编译器.

我已经读过,我可以完全关闭编译器检查,但这听起来像是一个糟糕的选择.这只是CMake中的一个错误吗?

arm cmake windows-8 windows-runtime visual-studio-2012

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

Xcode 4.6(4H127),clang警告"字符串文字中的非法字符编码",用于ISO-8859-1编码的o-umlaut(0xF6)

此代码在Xcode的早期版本中编译.我更新了Xcode,现在编译失败了.我猜我的代码有问题.下面代码中的问号是根据ISO-8859-1(0xF6)编码的o-umlaut(ö) - 我们用来调用这个上部(或扩展)ASCII.我猜测编译错误与转换为clang的UTF-8输入编码有关?

$ xcrun -sdk macosx10.8 -run clang -v
Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.2.0

$ cat test.c
#include <stdio.h>
int main( int argc, char** argv )
{
    fprintf( stderr, "?\n" );
    return 0;
}

$ xcrun -sdk macosx10.8 -run clang -o test test.c 
test.c:4:23: warning: illegal character encoding in string literal [-Winvalid-source-encoding]
    fprintf( stderr, "<F6>\n" );
                      ^~~~
1 warning generated.
Run Code Online (Sandbox Code Playgroud)

c ascii utf-8 clang xcode4.6

3
推荐指数
1
解决办法
9519
查看次数

使用WinRT组件的C#XAML Metro应用程序在异步方法上调用task.wait()或task.get()抛出:未处理的异常0xc0000409

我最近在Windows 8上进行了很多实验,使用用C++/CX编写的WinRT组件编写C#XAML Metro风格的应用程序,以获得更好的性能,并使用C#中没有的功能,特别是DirectX.

在我的WinRT组件中从我的应用包中加载资源时,我的应用程序抛出了以下内容:

TestResources.exe中0x0fd58ae3(MSVCR110D.dll)的未处理异常:0xC0000409:0xc0000409.

我试图对新的StorageFile API进行异步调用(Windows :: Storage :: StorageFile :: GetFileFromApplicationUriAsync链接到其他调用来读取文件内容)并使用concurrency :: task.get()同步生成的任务链.

它似乎没有起作用.如果我没有调用concurrency :: task.get()或concurrency :: task.wait(),那么问题就不会发生,但由于我的DirectX代码的编写方式,我需要同步结果.

directx microsoft-metro windows-runtime c++-cx winrt-xaml

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