小编MrL*_*ane的帖子

EF4 POCO:快照与WCF上的自我跟踪

去年,我使用Entity Framework(当然是.NET3.5)为我们的项目开发了一个数据访问服务,并使用Julie Lerhman的书作为指导开发了状态跟踪POCO对象.我们使用WCF并且还拥有Silverlight 3客户端.我们正在转向.NET 4.0,我想转而使用代码生成来消除浪费的开发人员编写POCO类和翻译类的时间.

通过我所做的研究,似乎有三种状态跟踪POCO:

1)更改了跟踪代理:对我们似乎没有用,因为它似乎不适用于WCF序列化.

2)基于快照:检索POCO实体图时拍摄快照,将客户端返回的图与该快照进行比较,比较差异......对我来说似乎不错.

3)自跟踪实体:代码生成器生成用于在POCO对象内进行自我跟踪的逻辑.这似乎与我们现在所做的很接近,除非它是为我们生成的.

我试图弄清楚所有这些方法之间的优缺点.我猜测1和2是"连接"的,并且他们需要最初查询POCO以保持实例化的ObjectContext,但是无法确认这一点.我也没有看到为什么有人会真的打扰选项1的原因,因为选项3似乎做同样的事情......

快照似乎对我来说最简单,但如果这需要ObjectContext保持打开很长一段时间我不太确定...

我只是一名初级程序员,所以这里有任何建议,特别是关于Silverlight 3(我相信选项2和3适用于Silverlight 3但2可能有问题)非常感谢.

wcf entity-framework snapshot poco self-tracking-entities

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

Wix:编辑控件没有设置属性

我有一个Wix的问题,其中Edit控件没有设置属性.我在XmlFile节点中使用该属性来修改复制到安装位置的.xml文件.在文件中正确设置了属性IS的值(正在使用默认值)但我似乎无法使用Edit控件中的值设置该属性.这让我疯了.

<Fragment>
    <Property Id="CUSTOMERNAMEPROPERTY" Value="Some default value" Secure="yes" />

    <UI>
        <Control Id="CustomerNameEdit" Type="Edit" X="120" Y="75" Width="220" Height="18" Property="CUSTOMERNAMEPROPERTY" Text="{80}" Indirect="yes" />
    </UI>
</Fragment>
Run Code Online (Sandbox Code Playgroud)

这有什么问题?谢谢

wix

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

关于非静态类和垃圾收集中的静态成员的问题

我的一位同事声称在C#中使用非静态类中的静态成员可以防止这些类的实例被垃圾收集,并且这是C#内存泄漏的常见来源.因此,他总是将静态成员包装在静态类中,并通过该静态类上的静态属性或方法从那里获取对它们的访问权限.我一直认为静态是在堆栈上,而不是堆,因此与垃圾收集没有任何关系.这对我来说似乎不对.

这有什么道理?

c# static garbage-collection

10
推荐指数
2
解决办法
5446
查看次数

直接频道使用与使用代理?

正如标题所暗示的那样,我试图理解为什么在WCF中有时人们选择"生成代理"而不是使用ChannelFactory来手动创建新的通道实例.我已经看过每个例子,但是没有真正找到任何解释为什么你会选择一个与另一个.

说实话,我只使用过频道和ChannelFactory<T>我继承的代码,即:

IChannelFactory<IDuplexSessionChannel> channelFactory =
    binding.BuildChannelFactory<IDuplexSessionChannel>();

_duplexSessionChannel = channelFactory.CreateChannel(endpointAddress);
Run Code Online (Sandbox Code Playgroud)

那我为什么要"生成代理"呢?有什么好处和缺点?

wcf proxy channel channelfactory

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

VC++ 10 MFC:进行本地化的正确方法是什么

我是一个不得不在MFC应用上做一些工作的.NET人.该应用程序是VS2008 MFC可执行文件,我已转换为VS2010.原始开发人员通过在应用程序命令行中指定具有键值对的.txt文件的名称来进行本地化.安装的可执行文件快捷方式指定了一个不同的.txt文件,具体取决于安装该应用程序的国家/地区.如果您直接运行.exe,这当然不起作用.对我来说,这似乎是一种奇怪的方式.

我想用MFC方式做这个,但我很难在Google上找到明确的答案.我的理解是.rc文件中的字符串表应该用于本地化?这是目前MFC的最佳实践吗?

关于字符串表,我已经读过,实践是为不同的语言创建多个字符串表.MFC应用程序如何选择使用哪种语言?它是基于机器当前语言设置还是我可以控制它(可能是我们希望语言由我们也在构建的Wix .msi安装程序指定)?

我还读到在MFC应用程序中嵌入所有资源已经失宠了,现在你应该编译单独的资源.dll?这是真的生病调查如何做到这一点......

最后,我是否必须做一些特殊的事情来让MFC支持Unicode或默认是MFC Unicode?

谢谢

mfc localization resource-file string-table visual-c++-2010

8
推荐指数
2
解决办法
8134
查看次数

C#:Action delegate vs explicit delegate

只是一个简单的问题:人们对使用Action委托进行公共类事件与定义自己的事件委托类型的想法是什么?我知道很多人使用Actions作为"次要"代理,例如lamdas和.ForEach()扩展方法等,但对于实际的类事件成员,使用Actions是个好主意吗?什么是这个领域的"最佳实践".

谢谢

.net c# events delegates

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

SOA和WCF设计问题:这是一个不寻常的系统设计吗?

我发现自己有责任继续开发一个我最初没有设计过的系统,并且无法向原设计师询问为什么会采取某些设计决策,因为它们不再存在.我是设计问题的初级开发人员,所以当我开始我的第一个SOA/WCF项目的项目时,我真的不知道该问什么.

该系统有7个WCF服务,将增长到9个,每个都在一个单独的控制台app/windows服务中自托管.所有这些都是单实例和单线程.所有服务都具有相同的OperationContract:它们公开Register()和Send()方法.当客户端服务想要连接到另一个服务时,他们首先调用Register(),然后如果成功,他们将使用Send()进行所有其余的通信.我们有一个DataContract,它有一个枚举MessageType和一个Content Propety,它可以包含其他DataContract"payloads".服务对消息的作用由枚举MessageType决定......一切都通过Send()方法传递,然后被路由到switch语句......我怀疑这是不寻常的

Register()和Send()实际上是OneWay和Async ...服务的所有结果都由WCF CallbackContract返回给客户端服务.我相信使用CallbackContracts的共鸣是促进我们正在使用的发布 - 订阅模型.问题不是我们的所有通信都适合发布 - 订阅并且使用CallbackContracts意味着我们必须在返回的结果消息中包含源详细信息,以便客户端可以计算出最初返回的结果...再次客户端有一个switch语句来解决如何处理基于MessageType(以及其他嵌入的详细信息)从服务到达的消息.

在拓扑方面:服务在图中形成"节点".每个服务都硬编码了它启动时必须连接的其他服务的列表,并且不允许客户端服务"注册"它,直到它完成所需的所有连接.例如,我们有一个LoggingService和一个DataAccessService.DataAccessSevice是LoggingService的客户端,因此DataAccess服务将在启动时尝试向LoggingService注册.直到它成功注册DataAccess服务将不允许任何客户端注册它.结果是,当系统整体启动时,服务以级联方式启动.我不认为这是一个问题,但这是不寻常的吗?

为了使事情变得更复杂,系统要求之一是服务或"节点"不需要彼此直接注册以便彼此发送消息,而是可以通过间接链接进行通信.例如,假设我们在链中连接了3个服务A,B和C,A可以通过 B ...使用2个跃点向C发送消息.

我实际上负责这个并编写了路由系统,这很有趣,但在我可以问为什么它真的需要之前,领先了.据我所知,没有理由不将服务直接连接到他们需要的其他服务.什么是更多我不得不写一个可靠的系统上的一切之上的要求是有可靠消息节点系统,wheras简单点至点链接WCF reliabily做这项工作.

在这个项目之前,我只使用winforms桌面应用程序3年,不知道更好.我的怀疑是这个项目过于复杂:我想总结一下,我的问题是:

1)图表拓扑的概念是否在间接链接上跳跃的消息不寻常?为什么不直接将服务连接到他们需要访问的服务(实际上我们正在做什么......我不认为我们有任何消息跳跃)?

2)在OperationContract中只暴露了2个方法,并使用MessageType枚举来确定消息是什么/如何处理异常?WCF服务不应该公开许多具有特定目的的方法,而客户端选择它想要调用哪些方法?

3)通过CallbackContracts进行的所有通信都回到了客户端.当然,同步或asyc请求响应更简单.

4)服务的概念是否不允许客户端服务连接到它(注册),直到它连接到它的所有服务(它是客户端)是一个合理的设计?我认为这是我同意的唯一设计方面,我的意思是DataAccessService在与日志服务建立连接之前不应接受客户端.

我有很多WCF问题,后面的主题会有更多问题.提前致谢.

wcf soa

6
推荐指数
2
解决办法
616
查看次数

WinRT和.NET澄清

我想澄清一些关于WinRT的问题以及.NET与之相关的内容.以下是我认为是真实的一系列陈述......纠正我错在哪里:

  1. WinRT是一个单独的COM暴露的本地面向对象的API,用C++编写,它本身并不构建在旧的基于C的Win32之上:它是完全独立的.
  2. WinRT至少现在只能用于Windows 8的Metro部分,而Win32不能用于Metro应用程序.Win8中的应用程序将是桌面或Metro,并且应用程序无法在两个API上绘制.这是一个或另一个.
  3. 传统的桌面/服务器.NET(基于Win32构建)将按照常规继续使用,但是在WinRT上构建的.NET Framework(如Compact Framework /客户端配置文件或Silverlight)可用于Metro世界.这就是C#和VB.NET在WinRT世界中运行的方式:它不是为桌面/服务器安装的.NET框架.UI使用XAML衍生物完成.
  4. Metro应用程序也可以使用本机C++构建,再次使用XAML for UI.那么C++/CLI呢?那些其他不那么流行的.NET语言呢?
  5. Metro应用程序也可以使用HTML5/CSS3/Javascript构建.我认为Metro系统有一个新的渲染和执行引擎,用于运行这些应用程序:我的理解是这些不能在IE浏览器中执行,因此它们是应用程序,而不是网页.
  6. Metro IE不会运行插件,因此Metro世界中没有Silverlight.
  7. 基于ARM的设备只能在Metro模式下运行Win8.

.net microsoft-metro windows-runtime

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

WCF SOA:CRUD数据访问服务......为什么这么麻烦(或者我们的设计是错误的)?

我们的SOA WCF系统中有一个数据访问服务.此服务负责在"系统范围"数据库表上执行CRUD(创建,更新,删除)操作,并且也是查询数据的来源.想要访问DAS控制下的表的系统中的任何其他服务必须转到DAS来获取或修改它.我们使用Entity Framework并为此DAS构建了我们自己的POCO状态跟踪系统.

我们的数据库中有其他表属于单个服务,只存储数据供自己使用,即在崩溃和恢复或记录业务信息时可以访问的状态信息.我们有一条规则,任何一个表都不能被多个服务访问:因此多个服务所需的数据最终会在DAS中出现.

事实是,我从来没有真正理解为什么数据访问服务是一个好主意,而不是直接访问表.它似乎更慢,我们的DAS不是事务性的,因为它不能发回数据库更新的POCO图(一次只有一个POCOS),我们也有问题,DAS实际上是另一个需要数据的服务的客户端从它...循环依赖.

为什么要打扰DAS?为什么DAS在SOA方面如此重要?我在这里错过了什么?单点控制?

它是一个SOA设计缺陷,并非所有表都是DAS的一部分,而且某些服务有自己的"私有"表吗?

关于这个欢迎的任何讨论.

wcf soa entity-framework data-access crud

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

WCF:Per-Call和Per-Session服务......需要说服Per-Call是值得的

我们目前正在审查我们的WCF服务设计,困扰我的一件事是Per-Call和Per-Session服务之间的决定.我相信我理解这两者背后的概念,但我并没有真正看到Per-Call服务的优势.我理解使用Per-Call服务的动机是WCF服务仅在调用期间保存服务器对象,从而限制服务实例持有昂贵资源的时间,但对我而言,它更易于使用类似于OO的每会话模型,其中您的代理对象实例始终与相同的服务器对象实例相对应,并且只需手动处理任何昂贵的资源.

例如,假设我有一个带有添加,更新,删除,选择方法的CRUD服务.这可以作为具有数据库连接的Per-Call服务("昂贵的资源")在服务器对象构造函数中实现.或者,它可以是一个每会话服务,其数据库连接在每个暴露的CRUD方法中实例化并关闭.

对我而言,它并没有什么不同的资源,它使编程模型更简单,因为客户端可以确保它们的代理服务器始终具有相同的服务器对象:保持调用之间可能存在的任何昂贵状态,并且没有额外的参数需要一种方法来识别服务在再次实例化新服务器对象时必须检索哪些状态数据(如Per-Call的情况).它就像使用相同资源管理问题的类和对象一样,但是我们不为每个对象上的方法调用创建新的对象实例!

那么Per-Call模型我错过了什么?

谢谢

wcf

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

在c#中访问泛型类的静态方法

我在代码中有以下情况,我怀疑这可能有点过于谨慎:

我有一节课:

abstract class DataAccessBase<T> : IDataAccess where T : AnotherAbstractClass
Run Code Online (Sandbox Code Playgroud)

该类DataAccessBase还有一个静态工厂方法,该方法使用where语句中的枚举值创建自身派生类的实例,以决定要创建的派生类型:

static IDataAccess CreateInstance(TypeToCreateEnum)
Run Code Online (Sandbox Code Playgroud)

现在,派生的类型DataAccessBase<T>本身不是通用的,它们为T指定了一个类型:

class PoLcZoneData : DataAccessBase<PoLcZone> // PoLcZone is derived from AnotherAbstractClass
Run Code Online (Sandbox Code Playgroud)

到目前为止,我不确定这是否正在推动使用泛型的极限,但我真正关心的是如何首先访问静态CreateInstance()方法:

我现在这样做的方法是简单地传递任何类型T,其中T : AnotherAbstractClass. 特别是我自己过去了AnotherAbstractClass.这允许编译很好,但在我看来,将任何类型传递给泛型类只是为了得到静态有点过于愚蠢.

我实际上已经简化了这种情况DataAccessBase<T>,因为继承链中的较低级别,但静态工厂方法存在于中间层,其中类PoLcZoneData是在非泛型的唯一级别上派生的最多.

人们对这种安排的看法是什么?

c# generics methods inheritance static

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

.NET:ForEach()扩展方法和Dictionary

我有一个简单的问题:我做了很多Dictionary.Value集合的迭代,并且让我很烦,我必须调用.ToList()然后才能调用.ForEach(),因为它似乎没有一个可枚举的集合. Dictionary(The Dictionary本身,Keys集合或Values集合)具有ForEach扩展方法.

ForEach()扩展方法没有在这些集合上实现,或者它只是MS认为不重要的东西有什么好的理由吗?

迭代字典集合是不寻常的吗?当存储从数据库中提取的数据时,我经常使用字典而不是列表,使用记录标识值作为密钥.我不得不承认我甚至没有用Id键查找的时间,但这只是我习惯的习惯......

foreach dictionary

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

单元测试SOA WCF系统......发现难以获得良好的覆盖率

我们目前正在用基于.NET3.5的现代SOA WCF系统取代已有20年历史的基于C的系统.我们的行业需要严格的测试,包括良好的自动化单元测试覆盖率 我们遇到了问题,但是将我们的SOA系统单元测试到接近基于C的系统进行单元测试的程度.

最大的问题是系统中的大多数方法实际上都依赖于跨服务边界调用代码,例如我们是大量数据驱动但我们不直接在我们的系统中访问数据库:我们调用WCF数据访问服务.

在visual studio中运行任何单元测试几乎是不可能的,因为做几乎任何事都会导致某种类型的跨服务调用.如果它不是数据访问其他服务之一.我估计我们可以获得大约5%的覆盖率.

我看到很多人都在努力测试SOA,所以我认为这对我们来说并不是独一无二的.问题是QA会质疑我们为什么不对系统进行单元测试.

老实说,我认为VSTS单元测试更像是回归测试,而不是验证(适合使用)工具.单元测试SOA有哪些选择?在人们的经验中实现良好的覆盖是否现实?有没有办法模拟数据访问服务(或任何服务:注意我们不使用WCF代理)或者我们是否必须向QA解释单元测试能力在过去20年中倒退了......

欢迎任何形式的建议,我想这是一个普遍的意见问题.

wcf soa unit-testing

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