1

同じコントラクトの異なるWCFサービス実装をホストする汎用ホストプロセス(WinForm)を作成しようとしています。最初のアドレスを実行すると問題なく動作しますが、別のアドレスを(並列に)起動すると、同じアドレスを2回使用するとスローされます(アドレスとポート)->パスは異なります。

    private bool InitializeServiceHost()
    {
        bool isInitialized = true;
        try
        {
            Log.InfoFormat("Loading service DLL {0} and class {1}", _dllPath, _serviceClassName);
            var asm = Assembly.LoadFile(_dllPath);
            _service = (IGfnService) asm.CreateInstance(_serviceClassName);
            if (_service == null)
                throw new ApplicationException(string.Format("Could not instansiate {0} from DLL {1}", _serviceClassName, _dllPath));

            _service.Init(_myGuidStr);
            Uri uri = new Uri("net.tcp://localhost:9085/GfnService/" + _myGuidStr);

            var host = new ServiceHost(_service, uri);

            Log.InfoFormat("About to open host, State: {0}, URI: {1} ", host.State, uri);
            host.Open();
            _serviceUri = uri.ToString();
            Log.InfoFormat("Gfn service started successfully, State: {0}, URI: {1} ", host.State, uri);
        }
        catch (Exception ex)
        {
            Log.Error(ex.Message, ex);
            isInitialized = false;
            Application.Exit();
        }
        return isInitialized;
    }

どんな助けでもありがたいです....

4

1 に答える 1

1

とった!それは今動作します!(すべてのコメント者に感謝します)

           var host = new ServiceHost(_service);
            Log.Info("Service host generated.");

            ServiceEndpoint serviceEndpoint = host.Description.Endpoints.Find(typeof(IGfnService));
            if (serviceEndpoint == null)
            {
                serviceEndpoint = host.AddServiceEndpoint(typeof(IGfnService), new NetTcpBinding
                {
                    MaxConnections = 10,
                    PortSharingEnabled = true
                }, uri);
                Log.InfoFormat("Endpoint [{0}] added", serviceEndpoint);
            }

秘訣は、PortSharingEnabled! を追加することでした。そのため、2 つのインスタンスが同じポートを共有できます。(以前にそれについて検討する必要がありましたが、少なくとも共有する機会がありました!)

ありがとう!

于 2012-06-27T13:28:07.003 に答える