我遇到了Windows 8和VS2012特有的问题.
我有一个TCP套接字服务器和客户端,我正在本地网络上进行一些测试.使用sysinternals TCPView,我可以看到数据包是从TCP客户端发送到达TCP服务器的(我看到数据包计数器增加).
但是,好像数据没有进入应用程序堆栈?在Windows 7上,完全相同的构建运行没有问题.
我关闭了Windows 8防火墙,并在关闭UAC的域管理员用户上使用提升的权限运行这两个进程.
当我将客户端连接到外部服务器(在单独的机器上运行)时,一切正常.Windows 8中是否还有其他可以禁止本地进程之间的TCP数据通信的内容?
谢谢,
编辑
为了确保我的服务器应用程序中没有任何内容导致此问题,我在控制台应用程序中构建了一个快速TCP服务器,其中包含以下用于套接字构造函数的代码:
listenerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Run Code Online (Sandbox Code Playgroud)
并在与我的服务器应用程序相同的本地IP /端口上侦听.我遇到了同样的问题,我可以telnet到端口但是listenerSocket.AcceptAsync永远不会被击中.
编辑2
在进一步测试时,我认为我的问题与使用Async套接字调用有关,即如果我使用像socket.Accept()这样的同步调用,则测试应用程序正常运行.但是,当我使用异步套接字调用,即socket.AcceptAsync()时,我遇到了上述问题.到目前为止,我找不到任何关于异步套接字调用的win7和8之间的差异.
这是我的快速示例应用程序,它显示异步回调从未被触发.此代码段在Windows 7中正常工作,但在Windows 8中不起作用(尝试telnet到127.0.0.1:7000).
class Program
{
private static SocketAsyncEventArgs socketAsyncEventArgs = new SocketAsyncEventArgs();
static void Main(string[] args)
{
var listenerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listenerSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 7000));
listenerSocket.Listen(100);
socketAsyncEventArgs.Completed += AcceptEventArg_Completed;
listenerSocket.AcceptAsync(socketAsyncEventArgs);
Console.ReadLine();
}
private static void AcceptEventArg_Completed(object sender, SocketAsyncEventArgs e)
{
Console.WriteLine("AcceptEventArg_Completed");
}
}
Run Code Online (Sandbox Code Playgroud)
编辑3
我发现其他2个人在Microsoft Connect上报告了同样的问题:https: //connect.microsoft.com/VisualStudio/feedback/details/759913/socketasynceventargs-completed-doesnt-fire-in-net-framework-4-5 和 http: //connect.microsoft.com/VisualStudio/feedback/details/747218/saea-not-working-in-net-4-5-rp
而第二个是有趣的,因为它似乎总结在Console.ReadLine()调用中有一个Windows错误,它导致问题并阻止异步回调.如果我用我的代码段替换Console.ReadLine():
while …Run Code Online (Sandbox Code Playgroud) .NET团队是否有计划在.NET 8/Server 2012中引入可在.NET中使用的RIO套接字?
在.NET中使用它们的过渡时期我有哪些选择 - 扩展Socket类?
除了Windows API文档,Windows套接字的新功能和Channel9视频,开发低延迟网络应用程序的新技术之外,我几乎找不到任何有关它们的文档.
我有以下XML:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="http://www.test.com/AuditTrail.xsl"?>
Run Code Online (Sandbox Code Playgroud)
和XSL:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<html>
<head><title>Test</title></head>
</html>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
这在IE8中工作正常,但在IE9或Chrome中没有.我已经读过,如果XML源文件在本地机器上,IE9似乎禁止从远程服务器加载XSL.有没有办法让IE9和Chrome将远程XSL文件应用到本地XML文件而不会破坏浏览器的安全设置?我们有一个桌面应用程序,可生成XML报告并在浏览器中显示它们,并使用托管在远程服务器上的样式表进行转换.
我有一个存储过程有一个BEGIN TRANSACTION和COMMIT TRANSACTION语句.在事务内是一个选择查询WITH(XLOCK, ROWLOCK).
如果提供了超出边界值的某些计算导致算术溢出错误,则事务可能会失败.在任何插入/更新语句之前都会发生此错误.
我的问题是,我应该将事务包装在TRY/CATCH和回滚中,还是这不是真正需要的,如果事务失败,所有锁都会自动释放?我唯一担心的是,在事务失败的情况下,SQL不会释放事务的所有锁.
谢谢,
汤姆
我在WinForms应用程序中遇到以下问题.我正在尝试实现热键,我需要在控件处于活动状态时处理Key消息,无论焦点是否在该控件内的文本框上,等等.
重写ProcessCmdKey可以很好地为此工作,并且完全符合我的要求,但有一个例外:
如果用户按下某个键并保持按下,则ProcessCmdKey会一直触发WM_KEYDOWN事件.
但是,我想要实现的是用户必须在另一个热键操作触发之前再次释放按钮(因此,如果有人坐在键盘上,它将不会导致连续的热键事件).
但是,我找不到捕获WM_KEYUP事件的位置,所以我可以设置一个标志,如果它应该再次处理ProcessCmdKey消息?
有人可以帮到这里吗?
谢谢,
汤姆
我开始研究NoSql并想知道其他人如何看待这些解决方案是否适合存储和查询金融时间序列数据?
例如,在一个简单的场景中,我会存储股票代码,开盘价,最高价,最低价,收盘价,成交量和时间戳.然后,我想根据符号和时间戳范围查询该数据.
对于这种情况,您认为什么是良好的文档结构?
谢谢,
汤姆
编辑:我主要关注NoSQL解决方案中基于时间序列的数据与传统RMDBS解决方案的读取查询性能
我想要实现以下目的,并且正在寻找示例/教程但却找不到任何东西:
我有C#Winforms应用程序,它在同一个进程中有多个表单.我希望能够在表单内和表单之间拖放项目,并希望提供一些被拖动项目的自定义绘制可视化.
例如,我的IM应用程序显示了我想要实现的效果:

谢谢,
汤姆
我下载了一组VS2015图标并通过MSDN指南阅读
在"使用图像中的颜色"下,声明" 为了使图标在Visual Studio黑暗主题中以正确的对比度显示,将以编程方式应用反转. "
我试图在我的应用程序中模仿这种行为,但是当我对图像应用颜色反转时,它并没有像在VS的黑暗主题中那样出现:
有谁知道VS如何反转颜色,所以我可以模仿这个?
编辑:这是我正在使用的反转代码 - 问题似乎是透明/ alpha的边缘:
public static void InvertColors(Bitmap bitmapImage)
{
var bitmapRead = bitmapImage.LockBits(new Rectangle(0, 0, bitmapImage.Width, bitmapImage.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppPArgb);
var bitmapLength = bitmapRead.Stride * bitmapRead.Height;
var bitmapBGRA = new byte[bitmapLength];
Marshal.Copy(bitmapRead.Scan0, bitmapBGRA, 0, bitmapLength);
bitmapImage.UnlockBits(bitmapRead);
for (int i = 0; i < bitmapLength; i += 4)
{
bitmapBGRA[i] = (byte)(255 - bitmapBGRA[i]);
bitmapBGRA[i + 1] = (byte)(255 - bitmapBGRA[i + 1]);
bitmapBGRA[i + 2] = (byte)(255 - bitmapBGRA[i + 2]); …Run Code Online (Sandbox Code Playgroud) 我刚刚从Windows 7/VS2010升级到Windows 8/VS2012的全新安装.我正在登录域用户(域管理员),并在从VS2012启动我的一些wcf服务时开始看到此错误:
HTTP无法注册URL
http://+:10001/.您的进程没有此命名空间的访问权限
我以前从未在Windows 7上遇到这种情况,我有点困惑,为什么我现在在Windows 8中看到这一点(域管理员,用户访问控制已关闭).随着一些研究,我发现这个错误的出现是由于在VS过程不与管理员权限,非管理员运行显然TCP端口可以不听,但我不太明白为什么VS不会为admin作为运行我登录的用户是域管理员?
我正在C#中实现一个简单的概念验证Telnet服务器,并通过telnet客户端内置的窗口telnet到它.我将所有非IAC数据回送给客户端.但是,我无法弄清楚如何使退格/删除正常工作.我尝试了一些来自telnet客户端的"BS"组合:
任何人都可以请指出什么是退格的正确控制序列并从屏幕上删除字符?
谢谢,
汤姆
我有两个应用程序在W2k8 R2 x64上运行,一个被编译为64位,另一个被编译为32位,因为它具有COM依赖性.在这两个我试图打电话:
Process p = Process.Start("telnet.exe", string.Format("{0} {1}", address, port));
Run Code Online (Sandbox Code Playgroud)
在x64中它工作得很好,但是在32位中我得到一个System.ComponentModel.Win32Exception("系统找不到指定的文件")?
知道这里发生了什么吗?即使我打电话
Process.Start(@"C:\Windows\System32\telnet.exe")
我得到同样的例外?
谢谢,
汤姆