Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在客户端和服务器之间共享域类和业务规则,就像在RIA服务中一样,只编写一次域类和业务规则_.net_Asp.net_Wcf_Client Server - Fatal编程技术网

.net 如何在客户端和服务器之间共享域类和业务规则,就像在RIA服务中一样,只编写一次域类和业务规则

.net 如何在客户端和服务器之间共享域类和业务规则,就像在RIA服务中一样,只编写一次域类和业务规则,.net,asp.net,wcf,client-server,.net,Asp.net,Wcf,Client Server,在ASP.NET-WCF应用程序中,我希望在客户端和服务器之间共享域类和业务规则,而无需重写它们,就像在Silverlight RIA服务中一样。在一个程序集中收集这些类并从客户端和服务器引用这些类可以解决问题,但如何解决:通过向客户端添加服务引用,将在客户端代理中生成这些类,而不需要任何行为(方法)。我怎样才能做到这一点 注意:不会使用RIA服务 编辑:在谷歌搜索之后,我发现了CSLA.NET。它能解决这个问题吗?您可以完全避免使用客户端代理 因此,首先,将契约类放入共享程序集中,并在服务器和

在ASP.NET-WCF应用程序中,我希望在客户端和服务器之间共享域类和业务规则,而无需重写它们,就像在Silverlight RIA服务中一样。在一个程序集中收集这些类并从客户端和服务器引用这些类可以解决问题,但如何解决:通过向客户端添加服务引用,将在客户端代理中生成这些类,而不需要任何行为(方法)。我怎样才能做到这一点

注意:不会使用RIA服务


编辑:在谷歌搜索之后,我发现了CSLA.NET。它能解决这个问题吗?

您可以完全避免使用客户端代理

因此,首先,将契约类放入共享程序集中,并在服务器和客户端程序中添加对项目的引用。在客户端,您可以使用ChannelFactory创建到WCF服务的连接并交换数据;差不多

ChannelFactory<IServiceContract> factory;
factory = new ChannelFactory<IServiceContract>("");

IServiceContract proxy = factory.CreateChannel();
using(proxy as IDisposable)
{
   proxy.MyMethod();
}
channel工厂;
工厂=新工厂(“”);
IServiceContract proxy=factory.CreateChannel();
使用(代理作为IDisposable)
{
proxy.MyMethod();
}

好的,我是这样做的:正如blowdart所说,我把我想要在服务器和客户端之间共享的所有域代码放在一个单独的程序集中。然后我让服务器和客户端都引用这个共享程序集。然后将服务引用添加到客户端,但有一个例外:在“添加服务引用”对话框中有一个按钮“高级”。在这里,我检查了引用程序集中的重用类型。通过这种方式,我为我生成了所有代理产品、异步方法调用等。

为什么不使用RIA服务?嗨,设拉子,很快,Silverlight就不会被使用了。WCF RIA服务不仅仅针对Silverlight。哦,我不知道,谢谢。我想我应该多解释一下这些要求。ria是否要求服务器和客户机项目位于同一个解决方案中,或者至少需要额外的程序集引用(我们不喜欢这样)?hi-blowdart,通过不添加代理类,我们将失去异步方法和其他UTULITE(如果有的话)。我将在找到问题的任何解决方案后立即更新此线程。当然,您可以将调用包装在后台工作线程中,或以其他方式处理异步行为。@arch,您可以在cleint上创建serivce接口的子接口,并添加“BeginXXX”方法