2011-11-03 9 views
6

私は城wcf施設の登録について混乱しています。Castle Wcf以外のサービスのためにSvcファイルを設定する必要があります

私はBasicHttpBindingのブログ記事を読んでいます。 しかし、net.tcp設定をセットアップするための明確な簡単なサンプルが見つかりませんでした。

私はコンソールアプリケーションからサービスをホストする

...

私はこのような何かを書いた...あなたはここでの問題を見ることができますか?あなたは、メタデータを公開したい場合は

_container = new WindsorContainer(); 
_container.AddFacility<WcfFacility>(); 

_container.Register(Component.For<IMembershipService>().ImplementedBy<MembershipService>() 
    .AsWcfService(
     new DefaultServiceModel() 
      .AddEndpoints(WcfEndpoint 
        .BoundTo(new NetTcpBinding() { PortSharingEnabled = false }) 
        .At("net.tcp://localhost/MembershipService") 
      ) 
      .PublishMetadata() 
    ) 
); 

答えて

4

あなたはMEXエンドポイントの共有と通常のTCPポートと同じポートを許可する(ポート共有を有効にする必要があります - あなたはfalseにこのセットを持っている場合は、AddressAlreadyInUse例外を取得します)、あなたはおそらく、そうあなたのコードが(と仮定しなければならないポート8080)はあなたのためOKです)(あなたのURLにTCPがそうでなければ使用するどのようなポートわからないポートを指定する必要があります。

_container.Register(Component.For<IMembershipService>().ImplementedBy<MembershipService>() 
    .AsWcfService(
     new DefaultServiceModel() 
      .AddEndpoints(WcfEndpoint 
        .BoundTo(new NetTcpBinding() { PortSharingEnabled = true}) 
        .At("net.tcp://localhost:8080/MembershipService") 
      ) 
      .PublishMetadata() 
    ) 
); 

この作品罰金使って城をウィンザー3.0。

+0

ユーザーがポート共有を使用できない可能性があることに注意してください。私はこの問題を抱えていました。私は、SMSvcHost.exe.configファイルのallowAccountsセクションを編集して、ユーザーがそれを実行できるようにするヒントを持ってCommunicationExceptionを取得しました。しかし、この解決策はファイルがC:\ Windows \ Microsoft.NET \にあるため実用的ではありません。これまでの解決策:Mexエンドポイント/ PublishMetadata()を削除してください。将来必要に応じて、第2のバインド構成でメタデータを公開します。 –

+0

ああ、私は "Net.Tcpポート共有サービス"をWindowsサービスで無効にしていました。エンドユーザはこれも無効にしている可能性があり、有効にすることができない場合があります(また、インストーラを使用して有効にすることはかなりの選択肢ではありません) –

関連する問題