我有两个通过TCP/IP进行通信的组件.组件A充当服务器/侦听器,组件B充当客户端.两者应该尽快沟通.任何时候都只能有一个连接(尽管这个问题不在此处).我公司的一位高级开发人员表示,我需要在两个组件之间使用应用程序级心跳,以确保连接保持打开状态.
我认为连接保持开放与TCP/IP,但我读过许多博客/网站,说这些应用程序之间的心跳是非常标准的做法.
我知道组件A心跳组件B的部分原因是,如果组件B存在通信问题(链路断开或组件B未运行),它可以通知支持.是否因任何其他原因需要心跳?比如确保经常出现"在管道中"保持开放的东西?
组件A当前每20秒检测一次组件B,如果在120秒内没有从组件B接收到任何内容,则关闭连接.然后,假设如果链路断开,组件B将定期尝试重新连接,则它继续侦听连接.这成功了.
重申我的问题:保持TCP/IP连接存活所需的心跳是否必要?
我最近回到了一个已经退缩的网站项目.由于重新开始工作,我注意到当应用程序在Visual Studio开发服务器中运行时,css和javascript更改无法被应用程序识别.以前工作正常.我可以更改样式表和javascript并运行应用程序并进行测试.现在我可以测试应用程序的唯一方法是将它发布到我的本地IIS服务器(虽然我相信重新启动我的电脑也可以解决问题).
使用Visual Studio 2008(9.0.30729.1)
自从我确定它正常工作后发生了变化的是操作系统,从Vista x64家庭高级版到Win 7 x64旗舰版,我已经将项目源从c:移到了d:.虽然我回到了C:同样的负面结果.我还在单独的WCF服务中移动了一些功能,由控制台应用程序(两个服务主机)托管,当网站在调试中启动时,这些应用程序将被调试.
停止开发服务器什么都不做.检出(使用VSS 2005)所有文件以确保没有任何内容只读取任何内容.唯一有效的方法是发布到IIS或重新启动我的机器.两者都不受欢 如果我每次停止调试都需要终止进程,以确保不使用以前的副本,我甚至会感到满意.
有解决方案吗
假设我有一个名为Tasking的组件(我无法修改),它暴露了一个方法"DoTask",它执行一些可能冗长的计算并通过事件TaskCompleted返回结果.通常,这是在用户在获得结果后关闭的窗体中调用的.
在我的特定场景中,我需要将一些数据(数据库记录)与TaskCompleted中返回的数据相关联,并使用它来更新数据库记录.
我已经调查了使用AutoResetEvent来处理事件的时间.问题是AutoResetEvent.WaitOne()将阻塞,永远不会调用事件处理程序.通常,AutoResetEvents被称为一个单独的线程,所以我想这意味着事件处理程序与调用的方法位于同一个线程上.
本质上我想通过阻塞将异步调用(通过事件返回结果)转换为同步调用(即从另一个类调用DoSyncTask),直到处理事件并将结果放在事件处理程序可访问的位置以及调用启动异步调用的方法的方法.
public class SyncTask
{
TaskCompletedEventArgs data;
AutoResetEvent taskDone;
public SyncTask()
{
taskDone = new AutoResetEvent(false);
}
public string DoSyncTask(int latitude, int longitude)
{
Task t = new Task();
t.Completed = new TaskCompletedEventHandler(TaskCompleted);
t.DoTask(latitude, longitude);
taskDone.WaitOne(); // but something more like Application.DoEvents(); in WinForms.
taskDone.Reset();
return data.Street;
}
private void TaskCompleted(object sender, TaskCompletedEventArgs e)
{
data = e;
taskDone.Set(); //or some other mechanism to signal to DoSyncTask that the work is complete.
}
}
In a Windows …Run Code Online (Sandbox Code Playgroud) 我读到umbraco在应用程序启动时运行我的代码我需要继承umbraco.Global并覆盖Application_Start.我已经完成了以下简单的代码,它位于umbraco网站项目引用的自己的程序集中,并在它的bin文件夹中.
public class AtomicF1Global : umbraco.Global
{
protected override void Application_Start(object sender, EventArgs e)
{
base.Application_Start(sender, e);
new WindsorStarter().Start();
throw new Exception("Reached Custom Global");
}
}
Run Code Online (Sandbox Code Playgroud)
唯一的例外是在那里纯粹向我证明它没有被召唤.
据我所知,我所要做的就是我所做的一切.我不需要在任何地方更新umbraco表(就像对umbraco进行许多不同的修改一样).
但是,我的代码永远不会被调用,我也无法找到原因.我需要在某处注册吗?
我还检查过以确保bin目录中没有"App_Global.asax.dll".
我也尝试在umbraco站点项目中创建一个Global.asax,如下所示:
<%@ Application Language="C#" Inherits="umbraco.Global" %>
<%@ Import Namespace="atomicf1.domain" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// Call Global base class first
base.Application_Start(sender, e);
// Code that runs on application startup
new WindsorStarter().Start();
throw new Exception("Reached Custom Global");
}
</script>
Run Code Online (Sandbox Code Playgroud)
umbraco的版本是4.7.1(.NET 4.0).
我正在维护VS2008中用ASP.NET 3.5编写的计费应用程序.发票是使用VS2008附带的水晶报告的水晶报告.
我的发票的首页在顶部和底部有许多图形,特别是首页图形页脚与页面底部齐平.
客户现已请求将页脚添加到发票中.我添加了一个带页码和分隔线的简单页脚.我也在第1页设置它压制页脚.
问题是页面页脚占用的空间仍然可以显示为首页上的空白区域,从而打破了发票布局.我设置了"保留最小页面页脚"和"抑制空白部分",两者都没有效果.根据我的研究,这个版本的水晶报告似乎没有解决方案.
有没有其他人有这个问题,并找到了一个不需要新版水晶报告的解决方案?
目前我已经将页码添加到页面标题中,并且可以正常工作.我尝试了从另一个SO问题中找到的建议http://www.crystalkeen.com/articles/crystalreports/pagebreaksconditional.htm但是没有用.我的报告未显示详细信息部分.它在页眉中显示首页,详细信息页面在页脚中显示子报表.
我正在使用Moq来模拟我的Repository层,所以我可以进行单元测试.
我的存储库层插入方法在发生成功的数据库插入时更新我的实体的Id属性.
在调用Insert方法时,如何配置moq以更新实体的Id属性?
存储库代码: -
void IAccountRepository.InsertAccount(AccountEntity account);
Run Code Online (Sandbox Code Playgroud)
单元测试:-
[TestInitialize()]
public void MyTestInitialize()
{
accountRepository = new Mock<IAccountRepository>();
contactRepository = new Mock<IContactRepository>();
contractRepository = new Mock<IContractRepository>();
planRepository = new Mock<IPlanRepository>();
generator = new Mock<NumberGenerator>();
service = new ContractService(contractRepository.Object, accountRepository.Object,
planRepository.Object, contactRepository.Object, generator.Object);
}
[TestMethod]
public void SubmitNewContractTest()
{
// Setup Mock Objects
planRepository
.Expect(p => p.GetPlan(1))
.Returns(new PlanEntity() { Id = 1 });
generator
.Expect(p => p.GenerateAccountNumber())
.Returns("AC0001");
// Not sure what to do here?
// How to mock updating …Run Code Online (Sandbox Code Playgroud) 我有一个基于Umbraco的博客,我想在我博客的首页上显示每个类别的前10个帖子.类别只是我的文档类型的另一个属性.
Umbraco基本上将其内容存储为XML,因此category是我的博客文章xml的一个元素.
我使用Blog4Umbraco作为Umbraco的基础博客包,它将博客帖子("文档")存储在基于日期的年/月/日层次结构中.例如,如果我今天创建了一个博客文章"帮我解决这个问题",它将在/ 2011/02/16/help-me-with-this.
我有xlst来显示所有帖子.它遍历每个文件夹,然后按日期排序.问题是我只想要每个类别的10篇最新博客文章.以下xslt显示选择特定类别的所有博客帖子.我如何将其限制为10只,因为我可能需要跨越多个文件夹(多天,几个月甚至几年)才能获得10个?
<msxsl:script implements-prefix='ss' language='CSharp'>
<![CDATA[
public string monthName(int monthNum)
{
DateTime date = new DateTime(1,monthNum,1);
return date.ToString("MMMM");
}
public int dayNumber(string date)
{
DateTime mydate = DateTime.Parse(date);
return mydate.Day;
}]]>
</msxsl:script>
<xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:param name="currentPage"/>
<xsl:param name="topic" select="/macro/category"/>
<xsl:template match="/">
<div id="archive">
<h3><xsl:value-of select="$topic" /></h3>
<xsl:for-each select="$currentPage/ancestor-or-self::node [@nodeTypeAlias = 'Blog']/node [@nodeTypeAlias = 'DateFolder']">
<xsl:sort select="number(@nodeName)" data-type="number" order="descending"/>
<xsl:for-each select="./node [@nodeTypeAlias = 'DateFolder']">
<xsl:sort select="number(@nodeName)" data-type="number" order="descending"/>
<xsl:for-each select=".//node [@nodeTypeAlias = 'BlogPost']">
<xsl:sort select="ss:dayNumber(@createDate)" data-type="number" order="descending"/> …Run Code Online (Sandbox Code Playgroud) 我的ASP.NET MVC应用程序通过使用ValidateAntiForgeryToken属性并调用Html.AntiForgeryToken来写入带有标记值的隐藏输入元素来阻止CSRF攻击,并将标记放在cookie中.
我的异常日志是报告HttpAntiForgeryException的出现,看起来它们是从有效请求触发的(推荐者看起来正确).导致异常的响应还在表单字段中包含带有标记值的__RequestValidationToken.但是,请求中缺少必要的cookie,导致验证失败并抛出异常.
我想到为什么这个cookie丢失了,并提出了以下可能的原因:
在解散中,我转向SO的人,并询问我可以调查的这个丢失的cookie的任何其他可能原因.
更新:我正在使用Sitecore 7.0版
到目前为止,我正在使用Glass.Mapper.Sc.我已经成功映射了许多模型.我现在只是尝试了我的第一个Query映射,无法让它工作.
我有以下两种型号
[SitecoreType(TemplateName = "Testimonial")]
public class Testimonial : ContentItem
{
[SitecoreField(FieldType = SitecoreFieldType.MultiLineText)]
public virtual string Summary { get; set; }
[SitecoreField(FieldType = SitecoreFieldType.RichText)]
public virtual string Testimony { get; set; }
[SitecoreField]
public virtual string Testifier { get; set; }
[SitecoreField(FieldType = SitecoreFieldType.GeneralLink)]
public virtual Link TestifierUrl { get; set; }
[SitecoreField]
public virtual string Company { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和
[SitecoreType(TemplateName = "Testimonials")]
public class Testimonials : ContentFeatureItem
{
public Testimonials()
{
TestimonialList = …Run Code Online (Sandbox Code Playgroud)