在同一个URL上运行SOAP和RESTful

时间:2011-02-04 17:57:57

标签: http rest soap asmx

假设我们有一个网站响应主机标题“kebab-shop.intra.net”

是否可以在此URL中同时拥有SOAP和RESTful?

也就是说,这两个都是在部署的代码中处理的。

  • kebab-shop.intra.net/takeaway.asmx
  • kebab-shop.intra.net/kebab/get/...

我被告知,如果没有太多解释,就无法做到这一点。 Like this answer。这可能是,我是一个数据库猴子,但我想对我做或不喜欢的选项有所了解。

到目前为止的想法

  • 单独的主机标头,例如添加kebab-shop-rest.intra.net
  • 单独的网站

理想情况下,我想拥有一个网站,一个 URL 域名,一个主机头。零机会?

这是带有.net 4的IIS 6.我们有一些大型企业限制,这意味着我们只能将zip文件放入网站使用的相关文件夹中。这旨在允许我们的客户迁移,而不会产生大型企业支持,基础架构和部署开销。共存只会持续一个月或三个月。

编辑:我问,因为我不是网络开发者。如果我的条款错了,这就是为什么......

所以......我希望IIS 6上的kebab-shop.intra.net上的SOAP和REST都没有复杂性。

2 个答案:

答案 0 :(得分:4)

  

也就是说,这两个都被处理了   在部署的代码中。

* kebab-shop.intra.net/takeaway.asmx
* kebab-shop.intra.net/kebab/get/...

是的,这肯定是可能的。如果您有一个WCF服务,则可以轻松地为同一服务公开两个单独的端点 - 一个使用例如basicHttpBinding(大致相当于ASMX),另一个webHttpBinding(REST)。

完整的网址必须不同 - 但我相信第一部分可以是相同的。

如果你在IIS6中托管,你需要一个虚拟目录,这将部分地决定你的SOAP端点 - 它必须是这样的:

http://kebab-shop.intra.net/YourVirtDir/takeaway.svc

(或http://kebab-shop.intra.net/YourVirtDir/takeaway.asmx如果您坚持使用ASP.NET遗留Web服务。)

并且REST端点可以位于同一虚拟目录中并定义URI模板,例如你可以有类似的东西:

http://kebab-shop.intra.net/YourVirtDir/TakeKebab/gbn

或类似的网址。

然而:我自己检查了这一点我发现你不能让两个服务端点都“在”同一个基地址“实时” - 其中一个必须有另一个“相对地址”。

所以要么添加例如“SOAP”到SOAP端点

http://kebab-shop.intra.net/YourVirtDir/takeaway.svc/SOAP/GetKebab
http://kebab-shop.intra.net/YourVirtDir/TakeKebab/gbn

或者向REST服务添加内容

http://kebab-shop.intra.net/YourVirtDir/takeaway.svc/GetKebab
http://kebab-shop.intra.net/YourVirtDir/REST/TakeKebab/gbn

答案 1 :(得分:3)

我没有看到你不能的原因。通常,您的SOAP端点将是每个服务的一个特定URL,而对于通过REST公开的资源,每个资源将有一个URL(遵循“URL模式”)。

SOAP的示例网址:

http://kebab-shop.intra.net/soap/service1    
http://kebab-shop.intra.net/soap/service2

REST的URL模式示例:

http://kebab-shop.intra.net/rest/{resourcetype}/{id}/

e.g.: http://kebab-shop.intra.net/rest/monkeys/32/

等...