我正在尝试对我编写的WCF主机管理引擎进行单元测试.该引擎基本上基于配置动态创建ServiceHost实例.这允许我们动态地重新配置哪些服务可用,而无需在添加新服务或删除旧服务时将其全部关闭并重新启动它们.
但是,由于ServiceHost的工作方式,我在单元测试此主机管理引擎时遇到了困难.如果已为特定端点创建,打开和尚未关闭ServiceHost,则无法创建同一端点的另一个ServiceHost,从而导致异常.由于现代单元测试平台并行化了他们的测试执行,我没有有效的方法对这段代码进行单元测试.
我使用过xUnit.NET,希望由于它的可扩展性,我可以找到一种方法来强制它以串行方式运行测试.但是,我没有运气.我希望SO上的某个人遇到类似的问题并且知道如何让单元测试连续运行.
注意:ServiceHost是一个由Microsoft编写的WCF类.我没有能力改变它的行为.仅托管每个服务端点也是正确的行为......但是,它不是特别有利于单元测试.
我对WPF比较陌生,有些东西对我来说很陌生.首先,与Windows窗体不同,WPF控件层次结构不支持IDisposable.在Windows窗体中,如果用户控件使用任何托管资源,则通过覆盖每个控件实现的Dispose方法来清理资源非常容易.
在WPF中,故事并不那么简单.我搜索了几个小时,遇到了两个基本主题:
第一个主题是微软明确指出WPF没有实现IDisposable,因为WPF控件没有非托管资源.虽然这可能是真的,但他们似乎完全错过了WPF类层次结构的用户扩展可能确实使用托管资源(直接或通过模型间接)的事实.通过不实现IDisposable,Microsoft已经有效地删除了唯一保证机制,通过该机制可以清除自定义WPF控件或窗口使用的非托管资源.
其次,我发现了一些对Dispatcher.ShutdownStarted的引用.我曾尝试使用ShutdownStarted事件,但似乎没有为每个控件触发.我有一堆WPF UserControl,我已经为ShutdownStarted实现了一个处理程序,它永远不会被调用.我不确定它是否只适用于Windows,或者WPF App类.但是它没有正确触发,每次应用程序关闭时我都会泄漏打开的PerformanceCounter对象.
清理非托管资源是否有比Dispatcher.ShutdownStarted事件更好的替代方案?是否有一些技巧来实现IDisposable,以便调用Dispose?如果可能的话,我更愿意避免使用终结器.
我曾与SvcUtil工具整天一直在努力,试图让它产生一些IMS企业服务有用的代码(主要是集团管理服务,但也有其他我们需要它的正常工作.)你可以找到IMS服务的WSDL在这里http://www.imsglobal.org/es/index.html.
我得出结论,SvcUtil是微软的一个无用的事后想法,它甚至不支持WSDL和XSD标准.它无法生成符合IMS使用和同时运行的标准WSDL协定的WCF服务.尽管从以下WSDL生成了可编译的代码(http://www.imsglobal.org/services/gms/wsdl/imsGroupManServiceSync_v1p0.wsdl),观察从WCF服务生成的WSDL(?WSDL,?WSDL = wsdl0,?XSD = xsd0等)表示没有操作的存在,并且只有在代码中生成的类型的一小部分是实际认可由WCF.如果我们使用生成的代码,我们可以获得某种功能(我们使用SoapUI进行测试),但它不再符合合同,因此对真正需要调用这些服务的人来说它是无用的.
有没有SvcUtil的替代品?(请不要建议使用内置的Visual Studio"添加服务引用"工具,这与使用与SvcUtil完全相同的代码一样无用.)我们需要能够让我们对代码生成方式进行一定程度控制的东西.从WSDL契约中,每个部分最终的文件,每个代码元素最终的名称空间等等.IMC合同导入特定于WSDL中定义的服务的XSD类型,以及所有共同的XSD类型. IMS服务.我们需要能够为这些类型生成不同的程序集,并在生成的代码中引用它们(类似于SvcUtil显然应该如何执行它...但它似乎没有按照它所说的文档所说的那样做根本.)
到目前为止,我一直是WCF的忠实粉丝.当你只使用.NET/WCF服务时,它显然有效,但是当你尝试在符合标准的跨平台环境中使用它时,一切都变得糟透了.
我需要从.NET/WPF应用程序中显示标准的"选择用户和组"对话框.我还需要能够在64位操作系统下显示它.我发现这篇CodeProject文章很古老,可以追溯到.NET 1.1天.它是用托管C++编写的,并作为COM对象公开,不适合我的需要.
有没有人实现或知道一个纯.NET/C#包装器的实现,用于显示和与标准系统"选择用户和组"对话框进行交互,该对话框将与WPF应用程序一起使用?
我知道这可能是一个古老的问题,但是......在AngularJS应用程序中是否有保护客户机密以执行OAuth2身份验证的最佳实践?我一直在努力思考一种解决方案,试图从现代风格的Web应用程序中提供对API的真正安全访问(它们不一定是AngularJS.)根据我的经验,添加抽象层和混淆层真的不做任何提高安全性的东西......他们只是让任何潜在的黑客更难破解安全蛋(但是他们中的许多人更喜欢挑战,所以你真正做的只是让黑客变得更有趣.)
除了显而易见的无效解决方案,例如代码混淆和卷积以及类似的事情,在现代Web应用程序中是否有保护客户机密的最佳实践?我知道这些问题出现在桌面客户端应用程序中,而且我不相信除了"可能会混淆,这会减慢黑客的速度"之外,还有一个解决方案.我们和网络应用程序在一起吗?这个问题没有真正的解决方案吗?
如果没有解决方案......使用OAuth保护REST API是否真的有任何意义?
在实际情况中,这个问题更多的是探索人们在社区中所做的事情,而非特定目标问题.我已经对此进行了广泛的搜索,虽然我发现许多博客主张提出契约优先服务设计并且有一些评论支持它们,但我还没有找到关于实施与WCF合同优先的实用信息,优缺点我在最近对SOA进行了一些广泛的研究,主要是通过Thomas Erl的书籍,他提倡的主要概念之一是契约优先设计.
我的问题如下:
合同优先发展的主要问题之一似乎是工具.Svcutil是我发现的唯一可以从合同生成服务代码的东西,它有一些非常差的输出.它的单个文件,充满了属性和代码生成工件,它基本上需要在合同更新时重新生成和替换.我更喜欢更好的方法,最好是不需要再生更换的方法.我甚至可以手动创建服务端合同,假设它在实际场景中是实用的.
编辑:
我刚刚在几个小时前安装了WebStorm 8.我一直在写一些AngularJS的东西,我有一个相当讨厌的小问题.AngularJS插件似乎部分工作,每当我输入ng-我得到一个intellisense弹出窗口,显示所有各种ng-*属性.然而,这就是事情停止运作的地方.我似乎没有在.js文件或.html文件中获得更高级的intellisense功能.如果我在app.js中创建一个名为"app"的角度模块,那么当我输入ng-app=
HTML文件时,"app"就不会显示出来.此外,WebStorm在编辑html文件时将所有ng-*属性突出显示为无效的html.其他angularjs功能似乎也没有用.例如,我没有在绑定中获得任何智能感知.
我在SO上发现了一些主题,表明我可能需要在项目设置中将AngularJS添加为JavaScript库...但是有关如何正确执行此操作的ZERO说明.关于SO的主题非常简短,并且链接到WebStorm文档,这是非常通用的,没有任何细节.在WebStorm中如何将AngularJS设置为JS库?这真的有必要吗?
我应该注意到AngularJS确实在WebStorm的设置中显示为一个插件,并且它被检查.我基本上只有ng-*属性intellisense,但我没有得到WebStorm 8附带的其他AngularJS增强支持.我已经完全安装和卸载了webstorm几次.不确定从哪里开始......
可能重复:
C#'var'关键字与明确定义的变量
对于仍在观看此事的人,我完全改变了对var的看法.我认为这主要是由于我对这个主题的回应.我现在是一个狂热的'var'用户,我认为它的支持者评论在几乎所有情况下都是绝对正确的.我认为我最喜欢var的是它真的可以减少重复(符合DRY),并使你的代码更加清晰.它支持重构(当你需要更改某些东西的返回类型时,你需要更少的代码清理来处理,并且不,不是每个人都有一个花哨的重构工具!),并且有趣的是,人们似乎并没有真正的问题不知道前面变量的具体类型(它很容易"发现"按需类型的功能,这通常是必要的,即使你知道类型的名称.)
所以这里有一个大的鼓掌的"变种"的关键字!
这是一个相对简单的问题......更多的是民意调查.我是C#的巨大粉丝,自从.NET首次发布之前已经使用了8年多.我喜欢对语言所做的所有改进,包括lambda表达式,扩展方法,LINQ和匿名类型.但是,C#3.0有一个功能我觉得被SORELY误用了......'var'关键字.
自从C#3.0发布以来,在博客,论坛和是,甚至Stackoverflow上,我已经看到var替换了几乎所有已编写的变量!对我来说,这是对该功能的严重滥用,并导致非常随意的代码,由于缺乏变量实际类型的清晰度,因此可能存在许多混淆的错误.
'var'只有一个真正有效的用途(至少在我看来).你问,这有效用途是什么?唯一有效的用途是当您无法知道类型时,以及可能发生这种情况的唯一实例:
访问匿名类型时
匿名类型没有编译时标识,因此var是唯一的选项.这是添加var的唯一原因......支持匿名类型.
那么......你的意见是什么?鉴于var在博客,论坛上的大量使用,由ReSharper等工具建议/强制执行,许多新兴开发人员将其视为完全有效的东西.
我想知道社区的意见.我看到var使用了很多,但我很少知道为什么,并且有一个很好的理由(即简洁/简洁).
我目前正在进行一项简短的研究项目.我工作的公司有一个非常繁重的发布过程,随着时间的推移越来越严重.我们在每个版本中遇到越来越多的问题,这些问题开始严重影响我们的交付时间表和每个版本的质量.我们提供了一个大型SAAS产品,该产品在一个非常大的Web场上部署到Internet.我们的部署流程目前由专门的团队处理,开发人员参与最少.我们主要是.NET商店,但我们也有几个Java组件.
我正在研究如何改进我们的质量保证和部署流程,以减少浪费,并将更多的流程纳入我们的开发团队.我有兴趣了解贵公司如何将您的产品(最好是SAAS,但不仅限于此类产品)部署到生产中,以及通过测试途径进行生产.我很好奇什么有效,什么没有,我相信很多人都有故事可讲.
编辑(附加RFC):
在我继续研究的过程中,我遇到了"持续部署"的概念,显然是由IMVU 3d在线社区团队开创的.这听起来像一个有趣的概念,如果可能有点复杂.我很好奇,如果SO上的任何人有持续部署的经验吗?特别是一个大型,复杂的项目,它有很多部分.你不一定必须不断地部署到生产环境......我们的短期需要,我们只会看看持续部署内部开发/ QA/perftest环境.如果有人实施了持续部署,我也很想知道如何管理数据库架构和数据更改/回滚.
谢谢!
我可能只是遗漏了一些明显的东西,所以如果这是一个非常愚蠢的问题我会道歉.我在视图中有一个WrapPanel,我需要绑定到ViewModel上的ObservableCollection.此ObservableCollection包含一种不同类型的ViewModel,当在WrapPanel中显示时,需要将其绑定到另一种类型的视图.目标是创建一个可以包装的项目列表,每个项目都通过一个较小的视图实例显示,该视图应该添加到WrapPanel.
我正在使用MVVM,而ViewModel无法直接访问View.如果可能的话,我宁愿不在ViewModel和View之间创建绑定,因此手动将项添加到WrapPanel.Children集合不是一个可行的选择.我不知道如何将一个子ViewModel对象的集合绑定到WrapPanel,以便创建另一个视图的实例并将它们添加到自身.我只是错误地解决了这个问题吗?我认为可能涉及DataTemplate,但WrapPanel似乎没有DataTemplate,也不是可绑定的.
感谢您的任何见解.
.net ×4
wpf ×3
angularjs ×2
c# ×2
wcf ×2
c#-3.0 ×1
data-binding ×1
dialog ×1
dispose ×1
finalizer ×1
intellisense ×1
mvvm ×1
oauth ×1
secret-key ×1
security ×1
soa ×1
svcutil.exe ×1
token ×1
unit-testing ×1
webstorm ×1
wrappanel ×1
xunit.net ×1