2011-02-24 50 views
0

我们需要公开的是目前居住在ASP.NET应用程序我们的组织中的其他应用的一些服务(即AddressValidatorService,CustomerFinderService)暴露WCF服务。通过WCF暴露这些服务似乎是天作之合,但我没有看到如何把这些常见的服务拉成WCF包装以这样的方式,我现有的ASP.NET应用程序可以继续用最少使用他们的任何最佳实践代码更改和/或意识到他们正在使用的服务不再处于进行中。创建/从现有的ASP.NET应用程序

我特别找上如何组织现有的ASP.NET解决方案,以及是否建议为我们举办新的WCF在同一个解决方案或在我们的ASP.NET应用程序和外部来电者都提到了一些新的共享WCF的解决方案。

此外,简单地推广目前只通过ASP.NET向进程完成的数据合同消费的DTOs是否是不好的做法,还是最好创建用[DataContract]明确装饰的重复DTO?后者看起来像是一场维护噩梦。

回答

1

要回答你的第二个问题:

而且,它是不好的做法,简单地推动当前的DTO只能通过ASP.NET进程消耗到完全成熟的数据合同,或者是它最好创建用[DataContract]明确装饰的重复DTO?后者看起来像是一场维护噩梦。

它被认为是不好的做法,暴露你的商业模式为WCF合同。所以,如果你的DTO是您的域模型的副本,那么它会严格的禁忌,因为
1模型将直接影响到合同,因此所有客户端的任何改变使用它是
2.你会被暴露您的业​​务“诀窍”到外部世界。

后者对于任何不断发展的系统来说都会变得困难,但是后来你有了各种各样的开源工具(比如AutoMapper),这些工具可以简化你的映射过程。

0

您可以将现有项目转换为WCF,然后继续使用的项目引用使用它的过程。然后可以使用WCF客户端使用永久源。 WCF客户端时所消耗过WCF从ClassName类的名称转换为ClassNameClient,但班会发挥作用几乎相同。

例如:

MyClass obj = new MyClass(); 
obj.DoSomething(withData); 

将成为:

MyClassClient obj = new MyClassClient(); 
obj.DoSomething(withData); 

你会发布WCF项目,一些端点,像address.example.com,然后使用一个服务引用端点引用代码,像其他项目中的项目参考一样。

请注意,尽管外部引用项目不会受到更改的影响,或者不知道数据正在通过网络传播,但如果您对该项目进行了闲聊,它肯定会对性能造成影响。您可能希望将相关方法合并为单一方法以节省往返时间。

0

如果这些被公开为静态页面的服务,有没有神奇的包装 - 你将需要移动代码到一个独立的服务实现类,并把一个.svc文件在它的前面。 (或者使用WCF4无文件激活或服务工厂,但是这里离核心问题稍微有些偏离。)

如果这些作为ASMX公开,您实际上可以将ASMX facade放在WCF服务类的前面并像从传统ASMX Web服务那样获得基本的HTTP/XML/ASMX响应。您通过标准WCF配置向非遗留使用者公开相同的WCF服务类。

最后,你可以将任何WCF服务为basicHTTP与serviceMetadata + httpGetEnabled,你会得到由传统消费者ASMX服务的可用服务端点。

http://msdn.microsoft.com/en-us/library/ms751433.aspx

相关问题