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

私はそれを解決しました。ふぅ!

私の問題は、子アプリケーションではなく、ルート Web サイト内から WCF サービスをホストしていたことです。メイン Web サイトで名前付きパイプを有効にするには、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">

OS の変更により、PowerShell スクリプトが壊れます。Server 2012 R2 (osFamily 4) で動作する RoleStart.ps1 の更新バージョンを次に示します。

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-NamedPipesNetPipesActivator サービスが存在しなかったため、 を追加しました。

  • に更新さEnabledProtocolsれましたenabledProtocols。それは少し検索しました。ブログ投稿へのコメントをようやく見つけて、正しい道を歩むことができました。

于 2016-03-01T22:35:18.897 に答える