因此,启动终止的对等体 - 即首先调用close() - 将最终处于TIME_WAIT状态.[...]
但是,在服务器上处于TIME_WAIT状态的许多套接字可能会出现问题,因为它最终可能会阻止接受新连接.[...]
相反,请设计应用程序协议,以便始终从客户端启动连接终止.如果客户端总是知道它何时读取了所有剩余数据,则它可以启动终止序列.例如,浏览器在读取所有数据时可以从Content-Length HTTP标头中获知,并且可以启动关闭.(我知道在HTTP 1.1中它会保持打开一段时间以便重用,然后关闭它.)
我想使用TcpClient/TcpListener来实现它,但目前尚不清楚如何使其正常工作.
这是大多数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个客户端之后,套装软件显示了很多插座的客户端和服务器都 …
我正在学习ActiveMQ和Camel,目标是创建一个像这样工作的小原型系统:
alt text http://www.paulstovell.com/get/stackoverflow-questions/Queues.png(big )
当订单放入订单系统时,会向任何订户(发布/订阅系统)发送消息,他们可以在处理订单时发挥作用.该订单,航运和进销存应用程序都有自己的ActiveMQ安装,因此,如果任何三个系统都处于离线状态,其他人可以继续工作.有些东西负责在ActiveMQ安装之间移动消息.
如果Apache Camel位于同一个ActiveMQ实例上,那么让Apache Camel通过路由将消息从一个队列移动到另一个队列非常容易.所以这适用于管理订阅队列.
接下来的挑战是将消息从一个ActiveMQ实例推送到另一个实例,这就是我不确定接下来要看什么的位置.
我正在使用TeamCity进行CI构建,并且我想在Windows XP和Windows 7虚拟机上设置第二个用于运行自动UI测试的构建.
我想构建的工作方式如下:
自动UI测试是使用NUnit编写的,需要直接在测试虚拟机上运行(它们无法远程运行).重要的是,如果测试失败,它将出现在TeamCity构建日志中,并且构建失败.我宁愿不在任何一个测试虚拟机上安装VS或TeamCity构建代理.
似乎大多数情况下应该可以使用psexec.exe.有什么替代方案(最好是开源的)我应该看一下吗?
我有一个应用程序:
我注意到,当应用程序启动时,即使它们在应用程序关闭(干净地)上一次运行时没有过时,索引也都会暂时失效.
例如,我运行应用程序,插入10条记录,并等待索引是最新的.我查询它并查看我期望的结果.然后我关闭应用程序,再次启动它,并查询,我没有得到任何结果.一秒钟之后,索引已经更新,我现在可以得到结果.如果我重复这个,有时我会得到10个结果,有时会得到0个结果,有时会得到2个结果
我的假设是,当在时间T查询索引时,我总是会在T + 1看到"至少一致"的结果.但是如果服务器在此期间重新启动,我似乎看到在T + 1处的结果不太一致.这不是最终的一致性,它最终是不一致的!:)
我的问题是:
我正在使用IIS7和Application Request Routing扩展来充当在Apache上运行的Subversion的反向代理.
代理工作正常,我能够探索服务器,甚至执行"签出".但是,我无法浏览通常被ASP.NET禁止的文件 - 例如.cs,.csproj等.ASP.NET不关心的文件 - 例如.txt - 很好.
我试图编辑全局web.config来删除这些文件的Forbidden处理程序映射,但它似乎没有什么区别.有没有办法允许IIS7中的URL重写模块工作,同时允许呈现所有文件扩展名?
像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模板匹配?
是否有Win32功能,我可以调用以显示Windows登录对话框?
例如,Internet Explorer和Visual Studio的团队资源管理器在访问网站时都显示凭据对话框 - 如何显示该对话框?
我有一个.NET Windows客户端应用程序,它在与Web服务通信时使用登录的Windows用户身份.这些服务使用该用户ID来确定谁正在调用该服务并确定他们有权查看的内容.
我想添加一个命令,允许当前用户有效地"运行",他们可以输入另一个用户的用户名/密码,我们让应用程序充当他们.
我可以构建一个自定义对话框并使用LoginUser()函数,但我宁愿使用"官方"的东西.
是否有可能在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的值,我可以对我的对象做些什么让它看起来真实或虚假吗?
如果我使用消息队列构建一个包含数十个发布者/订阅者的系统,我似乎有一些网络配置选项:
不同的技术似乎强制执行不同的配置 - 例如,MSMQ要求每台机器都有自己的本地队列,而Tibco EMS似乎经常用于集群,而不是每个消费者都有本地队列.
没有本地队列的缺点是什么,以及影响决策的因素是什么?
Solution1.sln包含两个项目:
ProjectB有一个名为"Foo"的自定义目标.我想跑:
msbuild Solution1.sln/t:Foo
这将失败,因为ProjectA没有定义"Foo"目标.
有没有办法让解决方案忽略丢失的目标?(例如,如果特定项目不存在目标,则不执行任何操作)而不修改SLN或项目文件?
.net ×2
apache-camel ×1
architecture ×1
asp.net ×1
asp.net-mvc ×1
c# ×1
iis-7 ×1
javascript ×1
messaging ×1
msbuild ×1
msmq ×1
nunit ×1
psexec ×1
ravendb ×1
routing ×1
sockets ×1
svn ×1
tcpclient ×1
tcplistener ×1
teamcity ×1
tibco-ems ×1
uritemplate ×1
winapi ×1
windows ×1