假设我们有一个网站响应主机标题“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都没有复杂性。
答案 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/
等...