在Silverlight 3.0中使用.NET RIA Services和MVVM时,RIA Services的Metadata类型和MVVM模式的ViewModel之间存在差异吗?这些是相同的还是应该分开?
元数据类型是部分Entity类的密封内部类.似乎没有适当的分离,但元数据类型也可以使用Validation的属性进行修饰,使其看起来像ViewModel.
我一直在四处寻找,但我没有看到任何有关这方面的细节.
我有一个非常简单的Silverlight应用程序示例.我使用具有一个实体的实体模型向其添加了域服务.客户端应用程序只是在启动时加载实体中的所有行.当我在我的开发盒上运行它时,它按预期工作.但是,当我将它移动到我们的测试服务器时,我得到一个异常,说我无法找到我正在调用的方法(查询'GetCTCStation'的加载操作失败.远程服务器返回错误.NotFound.).当我与Fiddler更密切地检查客户端/服务器通信时,我发现请求将转到http:// [server url] /ClientBin/SilverlightApplication7-Client-Web-CTCService.svc/binary.我将域服务添加到Web项目的根目录,所以我不明白为什么客户端在ClientBin目录中查找它.它显然不存在.我在这做错了什么?我从未与7月预览版RIA有任何问题.
它是相对的,但它会自动在Generated_Code文件中处理.并且webconfig中没有任何内容可供配置.我在创建域服务时使用了默认设置.我在实例化服务时尝试显式设置uri并发生了同样的异常.
[免责声明:我是ASP.NET MVC开发人员]
嗨,
我正在寻找一些在Silverlight 4中使用WCF RIA实现MVVM模式的最佳实践.
我不打算使用IoC的MEF来定位我的ViewModel.我想知道的是如何在Silverlight 4和WCF RIA中应用MVVM模式.
我不想使用像Prism或MVVM Light工具包这样的其他东西.我在互联网上发现了许多例子,展示了如何在视图上拖放数据源并完成工作(这让我想起了我的第一个VB6开发).
我试图用WCF RIA实现MVVM,它根本不是很明确的.如果我理解,MVVM应该包含所有逻辑,以便单独测试它,但是当它与WCF RIA结合时,它是另一个故事.我有以下问题.
我可以使用生成的元数据作为模型吗?如果我从头开始写所有内容会更容易使用它.
我看到了获取数据的唯一方法是通过DomainContext或通过视图中的直接绑定(本地资源).我不希望视图中的直接绑定,根本不可测试.另一方面,我不能使用DomainContext,它不暴露任何单个实体!我所拥有的只是可以绑定到datagrid的EntitySet.如何从ViewModel将单个实体绑定到DataForm?
如何将模型更新到数据库?
如何从一个实体导航到其项目的集合.例如,如果我有公司实体,我想显示一个DataForm来更新实体信息,并显示一个数据网格来显示公司的地址.保存表单时,我希望将信息保存到公司,并提供有关选择哪个地址为活动状态的信息.
请帮助我了解如何做得好.或者也许我应该放弃WCF RIA并从头开始使用WCF?
你怎么看 ?
我最近使用.NET 4.0对Silverlight,RIA Services和Entity Framework进行了实验.我正在试图弄清楚这个堆栈是否适用于我即将开展的任何项目.看起来这些技术似乎可以非常高效地开发应用程序,但我很难决定应该如何构建这个堆栈顶部的应用程序.
我遇到的主要问题是,在大多数演示中,我看到大多数业务逻辑最终都是RIA Services域服务类中的DataAnnotations和自定义验证.这对我来说似乎不合适.我认为域服务基本上是一个美化的Web服务,恰好可以很容易地将信息推送到客户端.但是我所看到的大部分内容似乎都将域服务定位为应用程序中业务逻辑的主要来源.
所以,我的问题:
我的问题涉及大型,复杂和长期存在的应用程序.显然,对于仅少数屏幕的应用,这不是一个问题.
编辑: 我要提到的另一件事是,显然你可以使域服务类变得愚蠢,但是你会丢失很多自动实体信息(例如验证)被推送到客户端.如果你输了,那么使用RIA服务有什么意义吗?
.net architecture silverlight entity-framework wcf-ria-services
对于哪些应用程序或开发方案,WCF数据服务的使用是有意义的,何时其他技术是更好的选择(例如WCF RIA服务,ADO实体框架,经典ADO.NET,简单服务或其他)?
我正在寻找使用Windows Workflow作为服务器端"业务逻辑"层的示例,WCF RIA服务处理与Silverlight UI之间的通信.谷歌搜索的例子,但似乎无法找到任何.如果有人能指出我的资源,我一定会很感激.
谢谢.
我使用Silverlight4,RIA Services构建了一个应用程序,并且我使用ASP.NET Membership进行身份验证/授权.
我的web.config有这个:
<system.web>
<sessionState timeout="20"/>
<authentication mode="Forms">
<forms name="_ASPXAUTH" timeout="20"/>
</authentication>
Run Code Online (Sandbox Code Playgroud)
我已经阅读了许多关于如何在客户端处理auth /会话超时的策略.也就是说:如果客户端空闲x分钟(此处为20),然后他们使用触发RIA/WCF调用的UI执行某些操作,我想要捕获该事件并进行适当处理(例如,将它们带回到登录屏幕) - 简而言之:我需要一种方法来区分真正的服务器端DomainException与auth失败,因为会话超时.
AFAIK:没有可以确定此问题的类型异常或属性.我能够确定这一点的唯一方法 - 这似乎是一个黑客攻击:是检查错误的消息字符串并查找"拒绝访问"或"拒绝"之类的内容.例如:这样的事情:
if (ex.Message.Contains("denied"))
// this is probably an auth failure b/c of a session timeout
Run Code Online (Sandbox Code Playgroud)
所以,这就是我目前所做的,如果我使用VS2010的内置服务器运行和调试,或者我在localhost IIS中运行,它就可以工作.如果我将超时设置为1分钟,登录,等待超过一分钟并触发另一个呼叫,我在异常上断点并输入上面的if代码块,一切都很好.
然后我将应用程序部署到远程IIS7服务器,我尝试相同的测试,它不起作用.所以,我添加了日志跟踪,这是发生异常的事件:
<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
<System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
<EventID>131076</EventID>
<Type>3</Type>
<SubType Name="Error">0</SubType>
<Level>2</Level>
<TimeCreated SystemTime="2011-10-30T22:13:54.6425781Z" />
<Source Name="System.ServiceModel" />
<Correlation ActivityID="{20c26991-372f-430f-913b-1b72a261863d}" />
<Execution ProcessName="w3wp" ProcessID="4316" ThreadID="24" />
<Channel />
<Computer>TESTPROD-HOST</Computer>
</System>
<ApplicationData>
<TraceData>
<DataItem>
<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Error">
<TraceIdentifier>http://msdn.microsoft.com/en-US/library/System.ServiceModel.Diagnostics.TraceHandledException.aspx</TraceIdentifier>
<Description>Handling an exception.</Description>
<AppDomain>/LM/W3SVC/1/ROOT/sla-2-129644844652558594</AppDomain>
<Exception>
<ExceptionType>System.ServiceModel.FaultException`1[[System.ServiceModel.DomainServices.Hosting.DomainServiceFault, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, …Run Code Online (Sandbox Code Playgroud) silverlight asp.net-membership silverlight-4.0 wcf-ria-services
我在服务器上有以下代码:
if (actualRowCount > maxRows)
{
throw new DomainException("OverMaxRowLimitException",
new OverMaxRowLimitException(string.Format(MaxRowsMessage,
actualRowCount, maxRows)));
}
Run Code Online (Sandbox Code Playgroud)
这将创建一个DomainException具有InnerException属性集的new .我已经验证这是在调试器中设置的.
因此定义了自定义异常:
public class OverMaxRowLimitException : Exception
{
public OverMaxRowLimitException(string message)
{
this.Message = message;
}
public new string Message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这应该向客户端返回一个明智的错误消息,以便可以告诉用户有太多行.所以在加载完成处理程序中我们希望:
if (result.HasError)
{
ShowError(result.Error.InnerException.Message);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,该InnerException物业是null.因此,我们必须检查的是外部异常消息的文本,该消息未正确传输到客户端.
有人建议我需要:
<customErrors mode="Off" />
Run Code Online (Sandbox Code Playgroud)
在Web配置文件中.我试过这个并没有用.
有人建议我需要:
[KnownType(typeof(OverMaxRowLimitException))]
Run Code Online (Sandbox Code Playgroud)
关于数据合同.现在,除非我把它放在错误的地方,否则这也行不通.
我也尝试添加[Serializable]自定义异常并将其替换为常规异常Exception.这些都没有奏效.
那么,为什么InnerException属性为null.我错过了什么?
更具体地说,为什么这样做:
foreach (ChangeSetEntry changeRow in changeSet.ChangeSetEntries)
if (changeRow is RouteStage)
{ ... }
Run Code Online (Sandbox Code Playgroud)
但这不是吗?
ChangeSetEntry changeRow = changeSet.ChangeSetEntries[0];
if (changeRow is RouteStage)
{ ... }
Run Code Online (Sandbox Code Playgroud)
在后一种情况下,我得到一个编译器警告说:
给定的表达式永远不是提供的类型.
我可以理解,因为changeRow它ChangeSetEntry不是一个RouteStage,所以为什么它在foreach块内工作?
这是我Submit对RIA Services DomainService中方法的重写.RouteStage是我定义的由实体返回的实体DomainService.
我的团队正致力于将基于云的Silverlight应用转换为HTML5应用的策略.虽然我们一直致力于制定策略以找到最佳的工具,技术和方法来将我们的应用程序转换为HTML,但我在这里提出这个问题是为了从SO的大型社区获得一些反馈,并从中获取经验.最近可能做过类似事情的人.
我的问题有几个部分.
我们的应用程序是用Silverlight编写的,并使用WCF RIA服务.最重要的是,我们非常依赖MVVM,我们希望不再重写该逻辑,从而尽可能多地重用代码.在您看来,我们可以使用哪种工具和技术的最佳组合?
为了制作SPA,我们希望使用一些"酷"新框架,但我们真的希望最小化我们的工作(由于硬截止日期),并能够轻松快速地彻底测试我们的应用程序(因此代码重复使用).SPA是一个不错的选择,还是我们应该选择传统的MVC应用?请记住,我们的应用程序中有超过200个视图.
如果我们选择走SPA路线,哪个框架最适合寿命.我们不得不离开Silverlight,因为它很快就要死了.我们不希望在不久的将来再次陷入同样的境地.
silverlight asp.net-mvc wcf-ria-services angularjs single-page-application
wcf-ria-services ×10
silverlight ×7
.net ×2
c# ×2
mvvm ×2
ria ×2
angularjs ×1
architecture ×1
asp.net-mvc ×1
wcf ×1