4

一部のテストコードでは、WCFサービスを数行でホストできるようにしたいと思います。私は簡単なホスティングクラスを書くと思いました:

public class WcfHost<Implementation, Contract> : IDisposable
    where Implementation : class
    where Contract : class
{
    public readonly string Address = "net.tcp://localhost:8000/";
    private ServiceHost _Host;

    public WcfHost ()
    {
        _Host = new ServiceHost (typeof (Implementation));

        var binding = new NetTcpBinding ();
        var address = new Uri (Address);

        _Host.AddServiceEndpoint (
            typeof (Contract),
            binding,
            address);
        _Host.Open ();
    }

    public void Dispose ()
    {
        ((IDisposable) _Host).Dispose ();
    }
}

これは次のように使用できます。

using (var host = new WcfHost<ImplementationClass, ContractClass> ()) {

このアプローチに何か問題がありますか?コードに欠陥がありますか(特に廃棄について)?

4

3 に答える 3

5

ホストが「障害」状態の場合、ホストのDisposeメソッドは例外をスローする可能性があります。これが発生した場合、元の例外が失われるため、実際に何がうまくいかなかったかはわかりません。テストコードの場合、これは問題ではないかもしれませんが、何かが機能しない理由を理解しようとすると、それでも問題になる可能性があります。

私はそれをテストしませんでしたが、Disposeメソッドでは次のことが問題ないはずです。

if (_Host.State == CommunicationState.Faulted)
{
    _Host.Abort();
}
else
{
    _Host.Close();
}
于 2010-04-12T11:29:41.733 に答える
0

固定バインディングとサーバーアドレスの制限に問題がなければ、これは私には問題ないようです。

usingホストを使用可能にする限り、コードが持続することを確認する必要があります。

于 2010-04-12T10:21:08.530 に答える
0

そのセルフホストを実装する場合は、イベントOnStartおよびOnStopを使用して、Windowsサービスに配置します。また、ベストプラクティスについては、次の変更を行ってください。

  • エンドポイント構成をApp.Configファイルに入れます-実稼働環境で管理する方が適切です。
  • ホストサービスを実装バイナリとコントラクトバイナリから分離します。

また、MSDNを見ることができます:http: //msdn.microsoft.com/en-us/library/ms730158%28v=VS.90%29.aspx 「Windowsサービスでサービスをホストする」ための良い方法があります

于 2010-04-12T12:55:08.507 に答える