WCF命名管道和Azure Web角色

WCF命名管道和Azure Web角色,wcf,azure,named-pipes,Wcf,Azure,Named Pipes,为了这一次,我花了太长时间把头撞在墙上 运行Azure SDK 1.7/Visual Studio 2010 Ultimate。我似乎无法在IIS/WAS承载的命名管道上运行WCF服务。任何试图连接到计算机模拟器中的“我的服务”的尝试都会产生 管道端点的网络。pipe://localhost/services/MyService.svc在本地计算机上找不到 我本来打算发布我的代码,但事实证明,本文中的示例代码给出了完全相同的错误。该站点上提供了所有代码 据我所知,powershell任务正在成功

为了这一次,我花了太长时间把头撞在墙上

运行Azure SDK 1.7/Visual Studio 2010 Ultimate。我似乎无法在IIS/WAS承载的命名管道上运行WCF服务。任何试图连接到计算机模拟器中的“我的服务”的尝试都会产生

管道端点的网络。pipe://localhost/services/MyService.svc在本地计算机上找不到

我本来打算发布我的代码,但事实证明,本文中的示例代码给出了完全相同的错误。该站点上提供了所有代码

据我所知,powershell任务正在成功执行。(好的,我必须在启动任务中将ExecutionPolicy从Unrestricted更改为RemoteSigned,但之后它运行得很好。)NetPipeActivator服务正在运行,当我调用Get-WebApplication时,我在协议列表中看到net.pipe:

PS C:\> $WebRoleSite = (get-website "*webrole*").Name
PS C:\> Get-WebApplication -Site $WebRoleSite

Name             Application pool   Protocols    Physical Path
----             ----------------   ---------    -------------
WcfService1      4a16b147-f9ac-41d9 http,net.pip c:\Code\WasInAzure\WcfService1
                 -9543-0577da64fb9a e
还可能发生什么事?

我解决了。呸

我的问题是,我是从根网站托管我的WCF服务,而不是一个子应用程序。为了在主网站上启用命名管道,我必须在powershell脚本中添加以下行:

Set-ItemProperty "IIS:/Sites/$WebRoleSite" -Name EnabledProtocols 'http,net.pipe'

在使用此示例代码时,我也遇到了此错误。在我的例子中,我在尝试复制云服务时收到了错误,但在解决方案中没有使用原始的云服务项目

关键的区别最终是中ServiceConfiguration元素的osFamily属性

在示例中,它被设置为“2:

更改摘要:

  • 添加了
    安装windowsfeature-名称为NamedPipes
    ,因为NetPipesActivator服务不存在

  • EnabledProtocols
    更新为
    EnabledProtocols
    。那只花了一些时间。我终于发现这让我走上了正确的道路

检查这些线程是否有帮助:
<ServiceConfiguration serviceName="WasInAzure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*" schemaVersion="2015-04.2.6">
<ServiceConfiguration serviceName="WasInAzure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2015-04.2.6">
write-host "Begin RoleStart.ps1"
import-module WebAdministration 

# Starting the listener service 
install-windowsfeature -name AS-Named-Pipes
$listenerService = Get-WmiObject win32_service -filter "name='NetPipeActivator'"
$listenerService.ChangeStartMode("Manual")
$listenerService.StartService()

# Enable net.pipe bindings
$WebRoleSite = (Get-WebSite "*webrole*").Name
Get-WebApplication -Site $WebRoleSite | Foreach-Object { $site = "IIS:/Sites/$WebRoleSite" + $_.path; Set-ItemProperty $site -Name enabledProtocols 'http,net.pipe'}
New-ItemProperty "IIS:/Sites/$WebRoleSite" -name bindings -value @{protocol="net.pipe";bindingInformation="*"}

write-host "End RoleStart.ps1"