小编Pau*_*ell的帖子

关闭TcpListener和TcpClient连接的正确顺序(哪一方应该是活动关闭)

在上一个问题中读到了这个答案:

因此,启动终止的对等体 - 即首先调用close() - 将最终处于TIME_WAIT状态.[...]

但是,在服务器上处于TIME_WAIT状态的许多套接字可能会出现问题,因为它最终可能会阻止接受新连接.[...]

相反,请设计应用程序协议,以便始终从客户端启动连接终止.如果客户端总是知道它何时读取了所有剩余数据,则它可以启动终止序列.例如,浏览器在读取所有数据时可以从Content-Length HTTP标头中获知,并且可以启动关闭.(我知道在HTTP 1.1中它会保持打开一段时间以便重用,然后关闭它.)

我想使用TcpClient/TcpListener来实现它,但目前尚不清楚如何使其正常工作.

方法1:双方关闭

这是大多数MSDN示例所示的典型方式 - 双方调用Close(),而不仅仅是客户端:

private static void AcceptLoop()
{
    listener.BeginAcceptTcpClient(ar =>
    {
        var tcpClient = listener.EndAcceptTcpClient(ar);

        ThreadPool.QueueUserWorkItem(delegate
        {
            var stream = tcpClient.GetStream();
            ReadSomeData(stream);
            WriteSomeData(stream);
            tcpClient.Close();   <---- note
        });

        AcceptLoop();
    }, null);
}

private static void ExecuteClient()
{
    using (var client = new TcpClient())
    {
        client.Connect("localhost", 8012);

        using (var stream = client.GetStream())
        {
            WriteSomeData(stream);
            ReadSomeData(stream);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我运行20个客户端之后,套装软件显示了很多插座的客户端和服务器都 …

.net sockets tcplistener tcpclient

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

分布式ActiveMQ与Camel

我正在学习ActiveMQ和Camel,目标是创建一个像这样工作的小原型系统:

alt text http://www.paulstovell.com/get/stackoverflow-questions/Queues.png(big )

当订单放入订单系统时,会向任何订户(发布/订阅系统)发送消息,他们可以在处理订单时发挥作用.该订单,航运进销存应用程序都有自己的ActiveMQ安装,因此,如果任何三个系统都处于离线状态,其他人可以继续工作.有些东西负责在ActiveMQ安装之间移动消息.

如果Apache Camel位于同一个ActiveMQ实例上,那么让Apache Camel通过路由将消息从一个队列移动到另一个队列非常容易.所以这适用于管理订阅队列.

接下来的挑战是将消息从一个ActiveMQ实例推送到另一个实例,这就是我不确定接下来要看什么的位置.

  1. Camel可以在不同的ActiveMQ安装之间路由吗?(如果它们在不同的机器上,我无法弄清楚JMI端点URI是什么).
  2. 我知道ActiveMQ具有存储和转发功能.这是我用于在订单和发货/发票之间移动消息的方法吗?
  3. 或者这就是Apache ServiceMix要解决的问题?

activemq-classic apache-camel apache-servicemix

17
推荐指数
1
解决办法
5867
查看次数

远程虚拟机上的自动UI测试策略

我正在使用TeamCity进行CI构建,并且我想在Windows XP和Windows 7虚拟机上设置第二个用于运行自动UI测试的构建.

我想构建的工作方式如下:

  1. 编译,运行单元测试等
  2. 使用WiX准备MSI
  3. 将MSI复制到目标测试计算机
  4. 远程执行MSI
  5. 将测试线束代码复制到远程机器
  6. 运行测试
  7. 建立完成

自动UI测试是使用NUnit编写的,需要直接在测试虚拟机上运行(它们无法远程运行).重要的是,如果测试失败,它将出现在TeamCity构建日志中,并且构建失败.我宁愿不在任何一个测试虚拟机上安装VS或TeamCity构建代理.

似乎大多数情况下应该可以使用psexec.exe.有什么替代方案(最好是开源的)我应该看一下吗?

teamcity nunit automated-tests psexec ui-automation

15
推荐指数
1
解决办法
4767
查看次数

应用程序启动时的RavenDB和陈旧索引

我有一个应用程序:

  • 使用嵌入式RavenDB数据库
  • 使用Monotonic读取选项
  • 使用静态索引

我注意到,当应用程序启动时,即使它们在应用程序关闭(干净地)上一次运行时没有过时,索引也都会暂时失效.

例如,我运行应用程序,插入10条记录,并等待索引是最新的.我查询它并查看我期望的结果.然后我关闭应用程序,再次启动它,并查询,我没有得到任何结果.一秒钟之后,索引已经更新,我现在可以得到结果.如果我重复这个,有时我会得到10个结果,有时会得到0个结果,有时会得到2个结果

我的假设是,当在时间T查询索引时,我总是会在T + 1看到"至少一致"的结果.但是如果服务器在此期间重新启动,我似乎看到在T + 1处的结果不太一致.这不是最终的一致性,它最终是不一致的!:)

我的问题是:

  1. 我的假设是错误的/愚蠢的吗?
  2. 有没有办法防止这种情况发生?
  3. 这种行为只是一个启动的事情,还是可能随时发生?例如,我可以渲染10个结果,然后刷新0结果,然后10个结果再次刷新,因为Raven决定重新索引所有内容吗?

eventual-consistency ravendb

14
推荐指数
1
解决办法
560
查看次数

IIS7和ARR作为Subversion的反向代理

我正在使用IIS7和Application Request Routing扩展来充当在Apache上运行的Subversion的反向代理.

代理工作正常,我能够探索服务器,甚至执行"签出".但是,我无法浏览通常被ASP.NET禁止的文件 - 例如.cs,.csproj等.ASP.NET不关心的文件 - 例如.txt - 很好.

我试图编辑全局web.config来删除这些文件的Forbidden处理程序映射,但它似乎没有什么区别.有没有办法允许IIS7中的URL重写模块工作,同时允许呈现所有文件扩展名?

svn iis-7 reverse-proxy

10
推荐指数
1
解决办法
2580
查看次数

URI模板可以用于匹配URI到路由吗?

像ASP.NET或Nancy这样的框架提供了可用于指定路由的语法,例如:

MapRoute("/customers/{id}/invoices/{invoiceId}", ...)
Run Code Online (Sandbox Code Playgroud)

在ASP.NET中,路由工作在两个方向.它们可以匹配请求URI(例如 /customers/32/invoices/19路由),并且可以将参数解析{ id: 37, invoiceId: 19 }URI.

RFC 6570:URI模板还定义了一个类似的,虽然更丰富的URI规范,通常用于解析 URI.例如:

UriTemplate("/customers/{id}/invoices{/invoiceId}{?sort}", { id: 37, invoiceId: 19, sort: 'asc' } )
// returns:  /customers/37/invoices/19?sort=asc
Run Code Online (Sandbox Code Playgroud)

我的问题是,RFC 6570中指定的语法是否可用于将请求URI与路由匹配?是否有一部分语法会使给定的URI与给定的URI模板匹配变得模糊不清?是否有任何库支持将URI与URI模板匹配?

asp.net asp.net-mvc routing uritemplate

10
推荐指数
1
解决办法
608
查看次数

Windows客户端应用程序的登录对话框

是否有Win32功能,我可以调用以显示Windows登录对话框?

例如,Internet Explorer和Visual Studio的团队资源管理器在访问网站时都显示凭据对话框 - 如何显示该对话框?

我有一个.NET Windows客户端应用程序,它在与Web服务通信时使用登录的Windows用户身份.这些服务使用该用户ID来确定谁正在调用该服务并确定他们有权查看的内容.

我想添加一个命令,允许当前用户有效地"运行",他们可以输入另一个用户的用户名/密码,我们让应用程序充当他们.

我可以构建一个自定义对话框并使用LoginUser()函数,但我宁愿使用"官方"的东西.

.net c# windows winapi

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

使对象变得虚假

是否有可能在JavaScript中覆盖对象上的某些内容,使其显示为"falsy"?

例如,我创建了一个这样的对象:

function BusyState() { 
  var self = this;
  self.isSet = false;
  self.enter = function () { self.isSet = true; };
  self.exit = function () { self.isSet = false; };
};

var isLoading = new BusyState();
isLoading.enter();
Run Code Online (Sandbox Code Playgroud)

我可以这样检查忙:

if (isLoading.isSet) 
Run Code Online (Sandbox Code Playgroud)

但我希望能够将其写为速记:

if (isLoading) 
Run Code Online (Sandbox Code Playgroud)

根据isSet的值,我可以对我的对象做些什么让它看起来真实或虚假吗?

javascript

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

发布/订阅消息中的本地与远程队列

如果我使用消息队列构建一个包含数十个发布者/订阅者的系统,我似乎有一些网络配置选项:

  1. 我可以拥有一台所有机器都使用的集群代理 - 每台机器都没有本地队列
  2. 我可以在每台机器上本地安装代理,并使用存储转发将消息传递到远程机器

不同的技术似乎强制执行不同的配置 - 例如,MSMQ要求每台机器都有自己的本地队列,而Tibco EMS似乎经常用于集群,而不是每个消费者都有本地队列.

没有本地队列的缺点是什么,以及影响决策的因素是什么?

architecture messaging activemq-classic msmq tibco-ems

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

MSBuild:忽略不存在的目标

Solution1.sln包含两个项目:

  • ProjectA.csproj
  • ProjectB.csproj

ProjectB有一个名为"Foo"的自定义目标.我想跑:

msbuild Solution1.sln/t:Foo

这将失败,因为ProjectA没有定义"Foo"目标.

有没有办法让解决方案忽略丢失的目标?(例如,如果特定项目不存在目标,则不执行任何操作)而不修改SLN或项目文件?

msbuild

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