在Azure中的IIS中使用net.tcp绑定主机WCF服务

时间:2014-11-30 16:13:25

标签: c# wcf azure net.tcp azure-cloud-services

我正在尝试根据本文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时,它会成功发布。

但即使在这种情况下,我也无法解析服务参考。

我必须做些什么才能使用这项服务?

2 个答案:

答案 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/的第二篇文章。