更新:如果你想节省冗长的序言,请跳至答案.
TCP/IP连接KeepAlives指定为每两个小时至少一次:http://tools.ietf.org/html/rfc1122#page-101.问题是这是写于1989年,并担心发送额外的KeepAlive数据包的成本!然而,仍然是默认时间,大多数操作系统根据规范在一段时间不活动后将KeepAlives发送到连接的套接字!当然,现在大多数连接超时之前的方式如果不活动,如果通过Internet连接连接到对等设备之前没有你的知识方式(尽管设置的超时高于那个 - 我怀疑因为中间的路由器表不打扰保持它活着 - 我总是想知道泄露的最后一条消息在哪里... 更新:原因是可能位于您或远程主机端的"路由器"处于"有状态"且可识别连接并在一段时间不活动后断开连接 - 您通过Internet访问的路由器无法断开连接 - 他们不关心 - 数据包只是发送到必须去的地方).所以我看到了两种常见的解决方案来保持互联网上的连接:
1)忽略(编辑:已经向我指出这不是无视规范它只是改变默认值)规范并将系统范围的KeepAlive间隔改为低于2小时,或2)实现自己的'KeepAlive'系统定期轮询对等体.
无论哪种方式; 什么是合适的时间段(发送KeepAlive的不活动时间)?我已经看到从1秒到默认2小时的所有内容.似乎这个数字是从拇指中吸出的......如果我有一个客户端应用程序从世界上任何地方连接什么是安全合理的时期(我想要一个持久的连接)?通过互联网连接到世界另一端的同伴很多跳,连接在301秒后死亡(尽管你在尝试发送东西时只知道它)所以将周期设置为300秒似乎是神奇的数字 - 我在死亡前获得了KeepAlive 1秒钟 - 这段时间从来没有让我失望过..但是它安全吗?
编辑:这个特殊的连接我实现在C#3.0所以代码在欢迎.
在Visual Studio 2012中一个空白的新类库我试图添加对解决方案中现有项目的引用,也是一个类库,MonoGame.Framework.Windows8(https://github.com/mono/MonoGame),但是得到错误:
无法添加对Project MonoGame.Framework.Windows8的引用
我已成功构建了现有的库MonoGame,并使其成为新库的依赖项.可能是什么问题呢?
(这是非常烦人的错误消息没有给出理由!)
是否可以在C#.Net(3.5及更高版本)中将变量复制到byte []缓冲区而不在进程中创建任何垃圾?
例如:
int variableToCopy = 9861;
byte[] buffer = new byte[1024];
byte[] bytes = BitConverter.GetBytes(variableToCopy);
Buffer.BlockCopy(bytes, 0, buffer, 0, 4);
float anotherVariableToCopy = 6743897.6377f;
bytes = BitConverter.GetBytes(anotherVariableToCopy);
Buffer.BlockCopy(bytes, 0, buffer, 4, sizeof(float));
...
Run Code Online (Sandbox Code Playgroud)
创建byte []字节中间对象变为垃圾(假设ref不再持有)...
我想知道如果使用按位运算符,变量可以直接复制到缓冲区而不创建中间字节[]?
在一个引用等待的行上await
的async
方法Task<T>
永远不会被命中之后,我很惊讶我的断点:
[Test]
public async void GetSomethingTest()
{
var service = SimpleIoc.Default.GetInstance<IService>();
var result = await service.TryGetSomethingAsync(20);
Assert.IsTrue(result.IsSuccess);
Assert.IsNotNull(result.ReturnValue);
}
Run Code Online (Sandbox Code Playgroud)
在第一Assert
行放置一个断点永远不会被击中,但测试通过了.
当await返回时如何打破?
更新:我想这是因为测试框架不是await
测试方法的调用,我使用的是NUnit 2.6.3并声称async
支持,但是这是否需要在await
我试图做之后打破,我不确定...
我正在尝试使用WebApi编写一个小型测试应用程序.我主要使用它,我能够从我的Web服务获取数据并在Android中显示它.
我添加了一个按钮,并使用了我在Winforms测试客户端中使用的相同代码:
async void buttonSave_Clicked(object sender, EventArgs e)
{
HttpClient client = new HttpClient ();
Customer data = new Customer () {
Surname = editSurname.Text,
GivenName = editGivenName.Text};
var result = await client.PutAsJsonAsync("http://10.0.0.4/WebApplication1/api/Customers/2", data);
if (result.IsSuccessStatusCode ) {
labelStatus.Text = "Saved";
}
}
Run Code Online (Sandbox Code Playgroud)
这在Windows窗体测试应用程序中工作正常,但在Xamarin应用程序中,我在client.PutAsJsonAsync上获得异常:
E/mono-rt(7519):[错误]致命未处理异常:System.TypeLoadException:无法从程序集'System.Net.Http.Formatting,版本加载类型'System.Net.Http.ObjectContent`1 [T]' = 5.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'.
有什么建议?使用Xamarin 3.
编辑:
如果我手动格式化内容,它可以工作:
string sData = Newtonsoft.Json.JsonConvert.SerializeObject(data);
HttpContent content = new System.Net.Http.StringContent(sData, System.Text.Encoding.UTF8, "application/json") ;
var result = await client.PutAsync("http://10.0.0.4/WebApplication1/api/Customers/2",content);
Run Code Online (Sandbox Code Playgroud)
据我所知,我的所有参考文献都是正确的.我使用了WebApi Client nuget包.
参考文献:
Newtonsoft.Json
System.Net.Http
System.Net.Http.Extensions …
Run Code Online (Sandbox Code Playgroud) 我想在新的通用Windows类库中使用最新的.NET Core.
但是,在VS2015中创建新库时,System.Net.Sockets.Socket
API似乎不会更新.特别是我想要这个提交:https://github.com/dotnet/corefx/pull/4079/files
我project.json
看起来像:
{
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0"
},
"frameworks": {
"uap10.0": {}
},
"runtimes": {
"win10-arm": {},
"win10-arm-aot": {},
"win10-x86": {},
"win10-x86-aot": {},
"win10-x64": {},
"win10-x64-aot": {}
}
}
Run Code Online (Sandbox Code Playgroud) 我在我的 GitHub 存储库中创建了一个分支:https : //github.com/markmnl/FalconUDP,所以现在有两个分支:“master”和“single-threaded”。我现在意识到我永远不想将“单线程”合并回“主”,并希望彼此独立地维护每个分支,尽管有时我会想从一个分支中挑选一些代码到另一个。
如果分支被意外合并,那将是灾难性的(虽然当然不是灾难性的,因为我总是可以回去——它在源代码控制中)。
我觉得我应该做的是将项目分叉到另一个仓库中。(这样我仍然可以使用 Pull Requests 来挑选樱桃)。
我现在该怎么办?
我已经阅读了很多关于MS开源.NET的新闻,例如http://blogs.msdn.com/b/dotnet/archive/2014/11/12/net-core-is-open-source.aspx.
但是,对于MS是否已发布在Linux和/或Mac上运行.NET应用程序的运行时,我仍然处于黑暗状态?我仍然有很多问题希望有人能回答:
在C#中,反射始终以:
myInstance.GetType();
Run Code Online (Sandbox Code Playgroud)
要么:
typeof(MyType);
Run Code Online (Sandbox Code Playgroud)
为了获得Type
,然后当查询有关类型的信息,例如获取属性,字段,属性等时,它们肯定会执行反射.
但是上面的调用反映了自己吗?
我认为在学术意义上答案是肯定的 - 因为你正在反思这种类型.所以我对这个问题的第二部分是:它是在运行时进行评估,是否第一次执行堆分配?(我知道GetType()
对同一类型的后续调用返回相同的Type
实例,因此.NET必须缓存结果 - 但它是否必须在第一次调用它时构造一个新类型?或者这个在编译时执行?
应该是我想象的简单场景;有
想在带有 IIS 的 Windows Server 上部署已阅读:Host ASP.NET Core on Windows with IIS
想要使用推荐的默认进程内托管模型
但是如何结合 Angular SPA 和 .net core web api?我可以让 web api 在 IIS 中的新站点下正常运行,从发布输出提供文件,但是我的 SPA 放在哪里?
api/blah
变成了alias/api/blah
我看到如果使用 Angular 模板来创建解决方案,它会创建一个ClientApps/dist
目录,也许可以使用该模板重新创建项目,然后在部署时将 Angular 构建转储到该目录中(因为 Angular 项目是在单独的 repo 中开发的)。
// In production, the Angular files will be served from …
Run Code Online (Sandbox Code Playgroud) c# ×8
.net ×4
.net-4.5 ×2
.net-core ×1
asp.net-core ×1
async-await ×1
buffer ×1
c#-5.0 ×1
git ×1
git-branch ×1
github ×1
iis ×1
mono ×1
monogame ×1
nunit ×1
open-source ×1
sockets ×1
tcp ×1
windows-8 ×1
xamarin ×1