WCF服务能像ASP.NET Web服务一样被使用吗?

5
我正在将另一家供应商的产品与我们现有的流程集成。这个产品通过ASP.NET Web服务与我们的系统进行交互。也就是说,我需要编写一个ASP.NET Web服务,其中包含供应商指定的特定方法名称和参数。
虽然很简单,但我们希望尽可能多地迁移到WCF。我还没有多少使用WCF的经验,但我认为它是ASP.NET Web服务(和其他东西)的替代品。
考虑到我无法修改供应商的产品,如果WCF服务可以像ASP.NET Web服务一样被消费(即,对于供应商的产品而言,它正在消费ASP.NET Web服务),那么我编写这个新Web服务的唯一途径就是使用WCF。
WCF服务能以这种方式被消费吗?
2个回答

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服务。

这篇文章详细讨论了这个问题,并提供了一个很好的解决方法:使用自定义ServiceHost。

上面文章中的服务主机代码不完整,因为它只能解决请求模式;您可能还需要对响应模式进行类似的操作。

祝你好运。


0
除了其他的答案和指出您的迁移问题,您仍然可以打开以保持您的旧Web服务按其目前状态工作,但将这些Web服务(现有的)指向WCF Host服务。这样新的和旧的Web服务就可以无缝地工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接