2012-07-17 147 views
2

我已經花了很長時間把我的頭撞在了牆上。WCF命名管道和Azure Web角色

運行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 

還能發生什麼?

+0

檢查那些線程幫助: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/3a97c32d-07f1-40a9-ab8c-f1220c8feb76 的http://社會.msdn.microsoft。COM /論壇/ EN-US/WCF /線程/ 55fae194-e1ea-4bd0-8c0a-dd924d4d4ac8 – 2012-07-18 11:15:44

回答

1

我解決了它。唷!

我的問題是我從根網站託管我的WCF服務,而不是子應用程序。我必須添加以下行到powershell腳本以啓用主網站上的命名管道:

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

我也在處理此示例代碼時遇到了此錯誤。就我而言,我在嘗試複製Cloud Service時收到錯誤,但未收到解決方案中的原始Cloud Service項目。

最終的關鍵區別是ServiceConfiguration.csfg file中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"> 

在OS的變化打破了PowerShell腳本。下面是RoleStart.ps1的更新版本,它應該服務器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。那個人進行了一些搜索。我終於找到了a comment to a blog post,這使我走上了正確的道路。