可以像使用ASP.NET Web服务一样使用WCF服务吗?

时间:2010-12-21 17:30:54

标签: asp.net web-services wcf

我正在将来自其他供应商的产品与我们现有的流程集成。

此产品通过ASP.NET Web服务与我们的系统连接。在中,我需要编写一个ASP.NET Web服务,它具有供应商指定的特定方法名称和参数。

很简单,但我们希望将尽可能多的东西迁移到WCF。我还没有使用过WCF,但是我认为它是ASP.NET Web服务(和其他东西)的替代品。

看到我不能修改供应商的产品,我可以使用WCF编写这个新Web服务的唯一方法是,可以像使用WCS服务一样使用它,就像它是ASP.NET Web服务一样(即,供应商的产品,它正在消耗ASP.NET Web服务)。

可以通过这种方式使用WCF服务吗?

2 个答案:

答案 0 :(得分:5)

是的,Web服务是Web服务。通常,WCF比ASP.NET更灵活,更强大,但是您可以将有线消息放入和转出WCF服务,使其看起来与ASMX服务的消息完全相同。但是,默认情况下,WCF也不同

迁移应该几乎是机械的。替换包含此内容的.asmx文件:

<%@ WebService 
    Language="C#" 
    CodeBehind="~/App_Code/CommunicationService.cs" 
    Class="CommunicationService" %> 

...包含以下内容的.svc文件:

<%@ ServiceHost 
    Language="C#" 
    CodeBehind="~/App_Code/CommunicationService.cs" 
    Service="CommunicationService" %> 

......你差不多完成了。

但是,WCF Web服务的默认设置与ASP.NET Web服务的默认设置不同。特别是,传入和传出消息的XML名称空间可能不同。并非每个人都为其服务和消息指定不同的xml名称空间,但对于那些人来说,迁移将是一个问题。行为差异(WCF-vs-ASPNET)将导致成功能够调用ASMX服务的应用程序无法使用“转换”的WCF服务。

This article详细讨论了该问题,并描述了一个很好的解决方法:使用自定义ServiceHost。

上面文章中的服务主机代码不完整,因为它只能修复请求架构;您可能/可能还需要为响应模式执行类似的操作。

祝你好运。

答案 1 :(得分:0)

除了其他答案并指出您的迁移问题之外,您仍然可以打开以保持旧Web服务现在正常工作,但将这些Web服务(现有)指向WCF主机服务。所以新的和旧的Webservice都能无缝地工作。