Azure上已有不可修改的Cloud Service,如何同时运行两个WCF服务?
解决Azure上两个WCF服务并行运行不被覆盖的方案
这个问题我之前帮不少开发者处理过,核心就是要让两个WCF服务在Azure上拥有独立的运行环境,避免部署时互相覆盖。给你三个可行的方案,你可以根据自己的实际场景选择:
方案1:利用Azure Cloud Service的部署槽(Deployment Slots)
这是最贴合你现有场景的方案,不需要新建额外的Cloud Service资源,还能和旧服务共享同一个Cloud Service的基础配置:
- 登录Azure门户,找到你正在运行的那个Cloud Service
- 进入「部署槽」(Deployment Slots)页面,点击「添加槽位」,给新槽起个辨识度高的名字(比如
WCF2-Staging) - 按照你之前部署旧服务的流程,把WCF2服务部署到这个新槽位里
- 部署完成后,新槽会有自己独立的访问URL(格式一般是
[槽名].[cloudservice名].cloudapp.net),旧服务依然在默认的Production槽正常运行,两者完全独立,不会出现覆盖问题 - 划重点:不要触发槽位交换操作,保持两个槽位各自独立运行就好
方案2:创建全新的Azure Cloud Service资源
如果想要完全的环境隔离,或者不想和旧服务共享任何资源,这个方案最直接省心:
- 在Azure门户中点击「创建资源」,搜索「Cloud Service(经典)」(匹配你当前使用的传统Cloud Service类型)
- 填写新的Cloud Service名称、区域等信息,注意名称要和旧服务不一样(Azure要求Cloud Service名称全局唯一)
- 把WCF2服务部署到这个全新的Cloud Service中,这样两个服务属于完全独立的Azure资源,绝对不会出现互相覆盖的情况
- 这个方案的优势是管理清晰,两个服务的资源配额、配置完全分开,适合长期并行运行的场景
方案3:在同一个部署包中部署多个WCF服务(备选)
如果你想把两个服务放在同一个Cloud Service的同一个部署里,需要调整部署包的配置(注:这个方案需要你能获取旧服务的部署包或代码,如果你不能修改旧服务的话,优先级低于前两个):
- 打开WCF2服务的
ServiceDefinition.csdef文件,添加新的端点配置,或者在同一个WebRole中为两个WCF服务设置不同的访问路径 - 比如旧服务用
/OldWCFService,新服务用/NewWCFService,确保两者的端点路径不冲突 - 把旧服务的代码和新服务的代码打包到同一个部署包中,然后重新部署到Cloud Service
- 部署完成后,两个服务会共享同一个Cloud Service的URL,通过不同的路径区分访问
额外注意事项
- 不管用哪个方案,都要确保两个服务的端口配置不冲突(比如HTTP默认用80,HTTPS用443,通过路径或子域名区分不同服务即可)
- 检查你的Azure账户资源配额,确保有足够的CPU、内存资源来同时运行两个服务
- 部署完成后,一定要分别测试两个服务的可用性,确认旧服务的正常运行不受新服务的影响
内容的提问来源于stack exchange,提问作者user3626339
相关产品推荐
相关产品推荐

