2

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

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

在本地计算机上找不到管道端点“net.pipe://localhost/services/MyService.svc”

我打算发布我的代码,但事实证明这篇文章中的示例代码http://blogs.msdn.com/b/tomholl/archive/2011/06/28/hosting-services-with-was-and -iis-on-windows-azure.aspx给了我完全相同的错误。所有代码都可以在该站点上找到。

据我所知,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

还有什么可能发生的?

4

2 回答 2

1

我解决了。呸!

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

Set-ItemProperty "IIS:/Sites/$WebRoleSite" -Name EnabledProtocols 'http,net.pipe'
于 2012-07-18T22:44:28.123 回答
1

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

最终的关键区别在于ServiceConfiguration.csfg 文件中 ServiceConfiguration 元素的 osFamily 属性。

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

<ServiceConfiguration serviceName="WasInAzure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*" schemaVersion="2015-04.2.6">

在较新的项目中,它设置为“4:”

<ServiceConfiguration serviceName="WasInAzure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2015-04.2.6">

操作系统的更改会破坏 PowerShell 脚本。这是 RoleStart.ps1 的更新版本,它应该适用于 Server 2012 R2 (osFamily 4):

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"

变更摘要:

  • 添加install-windowsfeature -name AS-NamedPipes,因为不存在 NetPipesActivator 服务。

  • 更新EnabledProtocolsenabledProtocols. 那个花了一些搜索。我终于找到了一篇博客文章的评论,让我走上了正确的道路。

于 2016-03-01T22:35:18.897 回答