问题列表 - 第15120页

PRISM和WCF - 他们玩得好吗?

好,

这是一个更普遍的"角落里丑陋的生物"问题.我打算开始一个关于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功能)

在PRISM中,要提出简单事件,您甚至不需要引用服务接口.IEventAggregator可以通过依赖注入获得,提供所需事件的实例(例如WeatherChangedEvent).只需调用eventInstance.Publish(23)就可以引发此事件,因为事件实现为public class WeatherChangedEvent : CompositePresentationEvent<int>

WCF - PRISM连接器

提升事件就像订阅事件一样简单.每个模块都可以使用相同的技术来获取事件,获取引用并使用Subscribe附加到此事件.

现在这里应该发生"魔术".客户端将包括一个棱镜模块,负责将PRISM事件连接到"wcf消息发送".它基本上将属于解决方案中的所有可用事件(它们都在基础结构模块中定义)并在发生事件时发送WCF消息.

SERVER和CLIENT之间的区别在于该模块的实现.由于两件事,需要略有不同.

  • WCF设置设置
  • 事件流以防止无限循环

事件流程将是(示例)

  1. 客户获得对WeatherChangedEvent的引用
  2. wChanged.Publish(27) - >正常的PRISM事件提升
  3. WCF_PRISM模块订阅了事件和
  4. 将此事件发送到服务器
  5. 服务器内部获取WeatherChangedEvent的实例并发布
  6. 服务器回调所有提升其WeatherChangedEvent的客户端

开放点

显而易见的是阻止循环.如果服务器将在所有客户端中引发事件,则客户端将回调服务器,再次引发事件,依此类推......因此,本地引发的事件之间需要存在差异(这意味着我必须发送它到服务器)和"服务器引起的事件",这意味着我不必将其发送到服务器.

此外,如果客户端本身已启动事件,则不需要服务器调用它,因为事件已经被引发(在客户端本身,第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]

wcf events prism

15
推荐指数
2
解决办法
3499
查看次数

在DateTime对象中存储短日期

我正在尝试将缩短的日期(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

c# datetime

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

在Java中使用Apache FOP的新字体

我必须国际化一个应用程序,因此必须让用户选择我将在运行时创建的PDF字体.我希望能够使用用户系统显示字体选择列表

GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
Run Code Online (Sandbox Code Playgroud)

这工作正常,为获得字体,但随后似乎我通过一些跳铁圈来获取字体发挥好与FOP,作为概述这里.我可以按照他们概述的所有说明进行操作,但我不确定如何获取字体的位置以便运行TTFReader.

  1. 有谁知道如何列出java使用getAllFonts()命令收集的每种字体的路径?
  2. 在PDF中嵌入字体是个好主意吗?例如,Arial Unicode MS TFF文件大约为30 MB.
  3. 这是使用FOP和XSL创建国际化pdf的唯一方法吗?

java pdf xslt apache-fop

6
推荐指数
1
解决办法
3579
查看次数

在Javascript中进行测试时,如何使html属性顺序保持一致

我有一个组件,在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属性的一致排序?

html javascript xml xhtml yui

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

C#List <T>包含测试

在移除物品时是否需要进行此类测试?

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)

c# list

5
推荐指数
2
解决办法
295
查看次数

如何"修复"SVN分支/树冲突?

我接管了一个软件项目并决定使用Tortoise SVN 将所有内容放在SVN(在Assembla上)下.行李箱在ROOT下.因此主干包含整个应用程序(我标记为1.0).对于我的第一个重要功能,我创建了一个名为"dev"的功能分支.

我可以将trunk分支中的更改合并到dev分支中而不会出现问题(因为我正在修复小错误).一旦我的功能完成,我就会合并回主干分支.到目前为止,一切都在发挥作用.ROOT下的新代码正确显示了新功能.但后来我做了一个提交(合并的结果),现在每次我尝试从root或dev分支进行合并时,SVN都抱怨许多文件的"树冲突".甚至是自合并以来我没有触及过的文件.我试图解决冲突,没有成功.

我是唯一的开发人员,因此我并不真正关心对存储库的重大更改.但是,如果可能的话,我仍然希望保留所有文件的历史记录.

解决此问题的最佳方法是什么?有没有办法可以将ROOT主干中的所有最新文件标记为文件的"明确"版本?


[编辑]更多信息

  1. 是的,'主'和'主干'是一回事.我澄清了我的问题
  2. 当您从功能分支合并回来时,您是否首先从中继进行另一次合并以获取最新的中继更改?"是的.主干是最新的.并且dev分支具有来自主干的所有更改.
  3. "一切都搞砸了":我的意思是提交很好,但是当我开始从主干/主干合并时,SVN抱怨'树冲突'.
  4. 我有超过200个树冲突.所以我正在寻找的是"接受所有"命令

[编辑] elhoim解决方案没有解决我的问题.但是,他对SVN版本问题是正确的.目前(2009-10-28),Assembla正在使用SVN v1.5.1,而我的tortoiseSVN则是v1.6.所以这就是我遇到这么多树冲突的原因.我尝试使用elhoim的链接提供的解决方案并且它不起作用(我在尝试HEAD-to-HEAD合并之前多次尝试了一堆合并.有些文件因此没有转移到根分支).

看到HEAD-to-HEAD合并仍然无效,我决定简单地删除分支文件夹中的所有".svn"文件,将文件复制到ROOT文件夹并进行提交.

svn branch

20
推荐指数
3
解决办法
5万
查看次数

如何编写cpp __DIR__宏,类似于__FILE__

__FILE____LINE__宏内置到Ç预处理器,并经常用于打印调试输出与文件名和行号.我需要类似的东西,但只需要路径末尾的目录名称.例如,如果我的代码在:/ home/davidc/some/path/to/some/code/foo/bar我需要一个宏,它只会给我"bar",如果代码在/ home/davidc/some中/ path/to/some/code/foo/bee然后我需要它给我"蜜蜂".

有什么想法吗?(顺便说一下,这是一个C++应用程序).

更新:要清楚,我正在使用一个宏,它将在编译时给我一个包含目录名的字符串,我不想在运行时进行任何字符串处理.

c++ directory c-preprocessor

7
推荐指数
1
解决办法
4051
查看次数

如何使用Google App Engine设置TDD开发流程?

我主要是一个Ruby人,但最近我一直在研究很多Python的东西,特别是App Engine代码.在Ruby中,我会使用自动化持续集成(自动测试),代码覆盖工具(rcov),静态分析(臭气),和突变检测(诘难.)在我的发展过程中,但我不知道如何最好地建立一个App Engine环境的类似开发过程.我也对可以在App Engine中工作的RSpecCucumber for Python的模拟感兴趣.

python tdd google-app-engine unit-testing

15
推荐指数
2
解决办法
2400
查看次数

sql查询获取超过3周的内容

我的内容表看起来像(contentID,title,created).我需要获取超过3周前创建的所有内容.

创建的SQL Server数据库是datetime类型.

sql t-sql sql-server

13
推荐指数
1
解决办法
3万
查看次数

给定缩放级别,将长/ lat转换为像素x/y

我正在尝试在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)

.net maps google-maps pixel coordinates

7
推荐指数
2
解决办法
1万
查看次数