コンテンツへスキップ

Configuration binding extension ‘system.serviceModel/bindings/netTcpRelayBinding’ could not be found. Verify that this binding extension is properly registered in system.serviceModel/extensions/bindingExtensions and that it is spelled correctly.

2011年7月25日

AppFabricサービスバスを使って、netTcpRelayBindingをやろうとしています。

リアルファブリックに配置してページを表示しようとしたら表題のエラーが表題のエラーが表示されました。開発環境では問題なく実行できていました。

エラーメッセージを頼りに検索していると、サービスバスのトラブルシューティングのページに行き当たりました。

http://msdn.microsoft.com/en-us/library/ee706702.aspx

AppFabric SDKインストーラがローカルのMachine.configを弄ってるから、それをマネしてアプリのconfigに書いちゃえよ!でも、ローカルでは動かなくなるよ!

Machine.configのMicrosoft.ServiceBus を参照しているエントリーだけを自分のWebロールのweb.configに書いたところ、その通りでした。

デプロイはできたし、表示されるエラーの内容も変わったから一歩前進w

<extensions>
<behaviorExtensions>
<add name=”connectionStatusBehavior” type=”Microsoft.ServiceBus.Configuration.ConnectionStatusElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
<add name=”transportClientEndpointBehavior” type=”Microsoft.ServiceBus.Configuration.TransportClientEndpointBehaviorElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
<add name=”serviceRegistrySettings” type=”Microsoft.ServiceBus.Configuration.ServiceRegistrySettingsElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
</behaviorExtensions>
<bindingElementExtensions>
<add name=”tcpRelayTransport” type=”Microsoft.ServiceBus.Configuration.TcpRelayTransportElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
<add name=”httpRelayTransport” type=”Microsoft.ServiceBus.Configuration.HttpRelayTransportElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
<add name=”httpsRelayTransport” type=”Microsoft.ServiceBus.Configuration.HttpsRelayTransportElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
<add name=”onewayRelayTransport” type=”Microsoft.ServiceBus.Configuration.RelayedOnewayTransportElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
</bindingElementExtensions>
<bindingExtensions>
<add name=”basicHttpRelayBinding” type=”Microsoft.ServiceBus.Configuration.BasicHttpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
<add name=”webHttpRelayBinding” type=”Microsoft.ServiceBus.Configuration.WebHttpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
<add name=”ws2007HttpRelayBinding” type=”Microsoft.ServiceBus.Configuration.WS2007HttpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
<add name=”netTcpRelayBinding” type=”Microsoft.ServiceBus.Configuration.NetTcpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
<add name=”netOnewayRelayBinding” type=”Microsoft.ServiceBus.Configuration.NetOnewayRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
<add name=”netEventRelayBinding” type=”Microsoft.ServiceBus.Configuration.NetEventRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
</bindingExtensions>
</extensions>

こちらにも解決策っぽいのがあったのですが、私の場合、Initializing ~ Busy ~ Stopping のループにはまってしまいました。何か間違えちゃったんだろうな。

http://msdn.microsoft.com/ja-jp/windowsazure/hh306277

 

2011/8/1追記

上記リンクの手法、スタートアップでRelayConfigurationInstaller.exeを実行する方法でうまくいきました。前回失敗したのは、RelayConfigurationInstaller.exe、RelayConfigurationInstaller.exe.config、startup.cmdは、ビルドアクション-なし・出力ディレクトリにコピー-常にコピーする、これをちゃんと設定していなかったんだろうな。出力ディレクトリにコピー-常にコピーする と設定すると、binフォルダに出力されます。ちなみに、スタートアップ周りの確認はリモートデスクトップ接続が使えます。

私がリモデで助かった例としては・・・、

なんとなく、サイトにStartupというフォルダを作ってRelayConfigurationInstaller.exeとRelayConfigurationInstaller.exe.configを格納し、Startup.cmdではStartup/RelayConfigurationInstaller.exeを実行するように設定しました。ですがこれはうまく実行されていないようでした。なぜそう判断したかというと、実行されていれば表題のエラーが出ないのですが出ちゃったので。。。

リモデで確認してみると、binフォルダの中にMicrosoft.ServiceBus.dll(参照設定でローカルコピー-Trueなので)、bin/Startupフォルダの中にRelayConfigurationInstaller.exeがありました。おもむろに、コマンドプロンプトを開いてRelayConfigurationInstaller.exeを実行してみると、FileNotFoundException(依存関係が見つからない)になってしまいました!

RelayConfigurationInstaller.exeはMicrosoft.ServiceBus.dllと依存関係があります。ですので、Microsoft.ServiceBus.dllをGACにぶっこむかRelayConfigurationInstaller.exeと同じディレクトリにMicrosoft.ServiceBus.dllが存在しないとFileNotFoundException(依存関係が見つからない)になってしまいます。Startupフォルダを作ったせいで、依存関係を参照できなくなってしまっていたわけですね。

ところで、startup.cmdはあれこれ試しているうちに以下のようになっています。RelayConfigurationInstaller.exeが失敗しようとしなかろうと、exitで戻り値ゼロを返してとりあえず配置シーケンスを先に進めるためです。そうしないと、Start-Stopのループを繰り返してしまってリモデ接続できないからです。

start /w RelayConfigurationInstaller.exe /i
exit /b 0

 

From → .NET, Azure

コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。