我正在尝试根据本文http://blogs.msdn.com/b/tomholl/archive/2011/06/28/hosting-services-with-was-and-iis-on-windows-azure.aspx在Azure中的IIS中托管带有net.tcp绑定的WCF服务。但它没有任何影响。
我尝试做下面的事情: 创建CloudService 创建WCF Web角色 在web-role项目中创建文件夹启动并在其中放置两个文件: STARTUP.CMD
powershell -command "set-executionpolicy Unrestricted" >> out.txt
RoleStart.ps1
import-module WebAdministration
# Starting the listener service
$listenerService = Get-WmiObject win32_service -filter "name='NetTcpActivator'"
$listenerService.ChangeStartMode("Manual")
$listenerService.StartService()
$listenerService = Get-WmiObject win32_service -filter "name='NetTcpPortSharing'"
$listenerService.ChangeStartMode("Manual")
$listenerService.StartService()
$WebRoleSite = (Get-WebSite "*webrole*").Name
Get-WebApplication -Site $WebRoleSite | Foreach-Object { $site = "IIS:/Sites/$WebRoleSite" + $_.path; Set-ItemProperty $site -Name EnabledProtocols 'http,net.tcp'}
New-ItemProperty "IIS:/Sites/$WebRoleSite" -name bindings -value @{protocol="net.tcp";bindingInformation="808:*"}
我还将net.tcp端点添加到具有端口808的角色属性。
首次尝试发布时失败 - 角色循环启动和停止。但是当我禁用Startup.cmd时,它会成功发布。
但即使在这种情况下,我也无法解析服务参考。
我必须做些什么才能使用这项服务?
答案 0 :(得分:1)
确保在您的Service Definition文件中,您的executionContext设置为“已提升”。有关可用选项的详细信息,请参阅this MSDN post。
答案 1 :(得分:1)
但是当我禁用Startup.cmd时,它会成功发布。
我在云服务中看到了很多启动文件。如果RDP进入您的实例并尝试从命令提示符运行Startup.cmd,那么您可能会看到问题。我愿意打赌(因此我提供这个作为答案而非评论的原因)是Starup.cmd和/或Rolestart.ps1的编码没有在您的云服务所在的机器上正确解释部署到。保存这些文件时,您需要使用代码页65001(UTF 8 w / out签名)而不是默认1252来保存它们。执行此操作并解决您的问题。
我将在博客中展示如何执行此操作,并为您在http://rickrainey.com/2013/08/30/hosting-a-wcf-service-in-an-azure-web-role-with-http-tcp-endpoints/尝试执行的操作提供逐步解决方案。如果您对保护您的WCF服务感兴趣,可以查看http://rickrainey.com/2013/09/18/securing-a-wcf-service-in-an-azure-web-role-with-http-tcp-endpoints-2/的第二篇文章。