好,
这是一个更普遍的"角落里丑陋的生物"问题.我打算开始一个关于WCF和PRISM的项目.有一段时间我一直在玩PRISM,并且必须说,我喜欢它.具有良好发展可能性的应用的坚实基础.
现在我想要合并WCF并构建一个分布式应用程序,其中一个部分在服务器上,两个在客户端上.根据情况,它可能是相同的机器,也可能不是.
我现在的想法是从PRISM中获取事件概念并使用WCF和回调"通过线路"扩展它,如此处所述的WCF AlarmClock回调示例.
我创建了一张小图片来说明这个想法(主要是针对我),也许这会使事情变得更加清晰:

灰色箭头代表"使用lib".WCF-Event-Base意味着正常的PRISM事件,其中发布方法被称为"通过线路".
有几个问题浮现在脑海中:
关于第二个问题,我目前考虑使用字符串(我想要提出的具体事件的类型)和有效负载作为参数来提升事件.像public void RaiseEvent(string eventType, object eventPayload){}有效载荷这样的东西需要可序列化,也许我甚至包括一个hashcheck.(意思是如果我举起例如一个带有图片作为参数的事件10次,我只转移图片一次,之后使用哈希让服务器在发布时使用缓冲区)...
好的,我想你明白了.这个"东西"应该像一个巨大的单一应用程序,使用一种WCF_EventAggregator而不是普通的PRISM IEventAggregato r.(哇,写作的时候,我只是想"简单地"扩展IEventAggregator,不得不考虑这个)...
为什么我这样写?好吧,主要是反馈,并对我的想法进行排序.所以评论欢迎,或许我应该"小心"的任何事情?
克里斯
[EDITS]
应该有一个未定义的客户端数量,服务器不应该知道客户端.服务器本身可以是自身的客户端,在源代码的其他部分引发强类型的PRISM事件.
"客户端"和"服务器"之间的主要区别是WCF_PRISM连接器的实际实现,请参阅下一章......
在PRISM中,要提出简单事件,您甚至不需要引用服务接口.IEventAggregator可以通过依赖注入获得,提供所需事件的实例(例如WeatherChangedEvent).只需调用eventInstance.Publish(23)就可以引发此事件,因为事件实现为public class WeatherChangedEvent : CompositePresentationEvent<int>
提升事件就像订阅事件一样简单.每个模块都可以使用相同的技术来获取事件,获取引用并使用Subscribe附加到此事件.
现在这里应该发生"魔术".客户端将包括一个棱镜模块,负责将PRISM事件连接到"wcf消息发送".它基本上将属于解决方案中的所有可用事件(它们都在基础结构模块中定义)并在发生事件时发送WCF消息.
SERVER和CLIENT之间的区别在于该模块的实现.由于两件事,需要略有不同.
事件流程将是(示例)
显而易见的是阻止循环.如果服务器将在所有客户端中引发事件,则客户端将回调服务器,再次引发事件,依此类推......因此,本地引发的事件之间需要存在差异(这意味着我必须发送它到服务器)和"服务器引起的事件",这意味着我不必将其发送到服务器.
此外,如果客户端本身已启动事件,则不需要服务器调用它,因为事件已经被引发(在客户端本身,第2点).
所有这些特殊行为都将封装在WCF事件提升器模块中,从应用程序的其余部分看不到.我必须考虑"如何知道事件是否已经发布",也许GUID或类似的东西是个好主意.
现在是第二个大问题,我早些时候在讲述"字符串"时的目的是什么.每次添加事件时,我都不想编写新的服务接口定义.PRISM中的大多数事件都由一行定义,特别是在开发过程中我不希望每次添加事件时都更新WCF_Event_Raising_Module.
我想在调用WCF时直接发送事件,例如使用带有以下签名的函数:
public void RaiseEvent(EventBase e, object[] args)
Run Code Online (Sandbox Code Playgroud)
问题是,我真的不知道我是否可以轻松地序列化PRISM事件.它们都来自EventBase,但我必须检查一下......出于这个原因,我有想法使用类型(作为字符串),因为我知道服务器共享基础结构模块并且可以获得自己的事件实例(无需通过电线发送,只需arg)
到目前为止,我将继续提出问题以获得更多反馈.我刚刚得到的主要新"洞察力":必须考虑递归/ infite循环问题.
顺便说一句.如果有人对所有这些事件的谈话感到困惑,请试试PRISM.你会喜欢它,即使你只使用DI和事件(RegionManager,例如不是我最喜欢的)
克里斯
[结束编辑1]
我正在尝试将缩短的日期(mm/dd/yyyy)存储到DateTime对象中.以下代码是我目前正在尝试做的事情; 这包括我不想要的时间(12:00:00 AM):(
DateTime goodDateHolder = Convert.ToDateTime(DateTime.Now.ToShortDateString());
Run Code Online (Sandbox Code Playgroud)
结果将于10/19/2009 12:00:00 AM
我必须国际化一个应用程序,因此必须让用户选择我将在运行时创建的PDF字体.我希望能够使用用户系统显示字体选择列表
GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
Run Code Online (Sandbox Code Playgroud)
这工作正常,为获得字体,但随后似乎我通过一些跳铁圈来获取字体发挥好与FOP,作为概述这里.我可以按照他们概述的所有说明进行操作,但我不确定如何获取字体的位置以便运行TTFReader.
我有一个组件,在innerHTML中创建一组这样的文本:
fourty two<br><br><input value="Select" type="button">
Run Code Online (Sandbox Code Playgroud)
在设置innerHTML时,浏览器有时会解析此文本,产生:
fourty two<br><br><input type="button" value="Select">
这种行为似乎依赖于浏览器,因为我可以让我的测试在FFx中运行,然后由于属性的顺序,它们将在safari中失败.
有没有办法可以将HTML解析为类似DOM的形式,然后在比较之前将其打印出来,以便我可以期待html属性的一致排序?
在移除物品时是否需要进行此类测试?
if (_items.Contains(item))
{
_items.Remove(item);
}
Run Code Online (Sandbox Code Playgroud)
而且,这个测试怎么样?
if (!_items.Contains(item))
{
_items.Add(item);
}
Run Code Online (Sandbox Code Playgroud) 我接管了一个软件项目并决定使用Tortoise SVN 将所有内容放在SVN(在Assembla上)下.行李箱在ROOT下.因此主干包含整个应用程序(我标记为1.0).对于我的第一个重要功能,我创建了一个名为"dev"的功能分支.
我可以将trunk分支中的更改合并到dev分支中而不会出现问题(因为我正在修复小错误).一旦我的功能完成,我就会合并回主干分支.到目前为止,一切都在发挥作用.ROOT下的新代码正确显示了新功能.但后来我做了一个提交(合并的结果),现在每次我尝试从root或dev分支进行合并时,SVN都抱怨许多文件的"树冲突".甚至是自合并以来我没有触及过的文件.我试图解决冲突,没有成功.
我是唯一的开发人员,因此我并不真正关心对存储库的重大更改.但是,如果可能的话,我仍然希望保留所有文件的历史记录.
解决此问题的最佳方法是什么?有没有办法可以将ROOT主干中的所有最新文件标记为文件的"明确"版本?
[编辑]更多信息
[编辑] elhoim解决方案没有解决我的问题.但是,他对SVN版本问题是正确的.目前(2009-10-28),Assembla正在使用SVN v1.5.1,而我的tortoiseSVN则是v1.6.所以这就是我遇到这么多树冲突的原因.我尝试使用elhoim的链接提供的解决方案并且它不起作用(我在尝试HEAD-to-HEAD合并之前多次尝试了一堆合并.有些文件因此没有转移到根分支).
看到HEAD-to-HEAD合并仍然无效,我决定简单地删除分支文件夹中的所有".svn"文件,将文件复制到ROOT文件夹并进行提交.
在__FILE__和__LINE__宏内置到Ç预处理器,并经常用于打印调试输出与文件名和行号.我需要类似的东西,但只需要路径末尾的目录名称.例如,如果我的代码在:/ home/davidc/some/path/to/some/code/foo/bar我需要一个宏,它只会给我"bar",如果代码在/ home/davidc/some中/ path/to/some/code/foo/bee然后我需要它给我"蜜蜂".
有什么想法吗?(顺便说一下,这是一个C++应用程序).
更新:要清楚,我正在使用一个宏,它将在编译时给我一个包含目录名的字符串,我不想在运行时进行任何字符串处理.
我的内容表看起来像(contentID,title,created).我需要获取超过3周前创建的所有内容.
创建的SQL Server数据库是datetime类型.
我正在尝试在ASP.NET中开发一个页面,它将充当Google Map的tile-server
它将从数据库中提取一组纬度/经度点,然后在给定缩放级别(默认值:15)的情况下将它们渲染为透明背景上的小红点.
然后它将结果作为GIF类型的图像返回.
是否开发了任何算法或库,允许我采用这组纬度/经度并将其转换为一组2D像素坐标,给定缩放级别?
(这一切都是在服务器端完成的,因此我无法使用Google Maps API.)
更新:在Perl中找到了类似的代码示例:
http://blog.barros.ws/2009/03/06/convert-lat-lng-and-zoom-values-to-pixel-xy-on-a-map/
麻烦的是,我不知道Perl,也没有时间破解书籍并学习它.
任何人都可以帮我解读这个函数中发生的事情吗?
sub Google_Coord_to_Pix
{
my $value = shift ;
my $lat = shift ;
my $lng = shift ;
my @d = ( ) ;
my $e = 0 ;
$d[1] = sprintf("%0.0f", $$value{'bmO'} + $lng * $$value{'pixLngDeg'} ) ;
$e = sin($lat * $$value{'Wa'}) ;
if( $e > 0.99999 )
{
$e = 0.99999 ;
}
if( $e < -0.99999 )
{
$e = -0.99999 ;
}
$d[0] …Run Code Online (Sandbox Code Playgroud) c# ×2
.net ×1
apache-fop ×1
branch ×1
c++ ×1
coordinates ×1
datetime ×1
directory ×1
events ×1
google-maps ×1
html ×1
java ×1
javascript ×1
list ×1
maps ×1
pdf ×1
pixel ×1
prism ×1
python ×1
sql ×1
sql-server ×1
svn ×1
t-sql ×1
tdd ×1
unit-testing ×1
wcf ×1
xhtml ×1
xml ×1
xslt ×1
yui ×1