Невозможно использовать powershell для удаленного запуска приложения WCF (System.ServiceModel).

У меня есть приложение aC#, использующее System.ServiceModel.dll. Я могу запустить приложение локально, но когда я пытаюсь использовать Power Shell для удаленного запуска, оно зависает:

Вот простой код для воссоздания проблемы:

    using System;
    using System.ServiceModel;
    using System.ServiceModel.Discovery;

    namespace PowerShellSecurity
    {
        class Program
        {
            static void Main(string[] args)
            {
                var serviceUri = "net.pipe://localhost/Foo/Bar";
                var discoveryUri = new Uri("soap.udp://239.255.255.250:3702/");

                var service = new MyService();

                var serviceHost = new ServiceHost(service, new Uri(serviceUri));
                serviceHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
                serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint(discoveryUri));
                serviceHost.AddServiceEndpoint(typeof(IMyService), new NetNamedPipeBinding(), serviceUri);

                serviceHost.Open();

                Console.WriteLine("It worked!");
            }
        }

        [ServiceContract]
        public interface IMyService
        {
            [OperationContract]
            void DoStuff();
        }

        [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
        public class MyService : IMyService
        {
            public void DoStuff()
            {
                throw new NotImplementedException();
            }
        }
    }

Я могу запустить его на локальном хосте, и он работает. Но если я запускаю следующую команду powershell с другого хоста:

icm -ComputerName myHost -ScriptBlock {iex "& 'c:\Users\me\Documents\Visual Studio 2013\Projects\PowerShellSecurity\PowerShellSecurity\bin\Debug\PowerShellSecurity.exe'"}

Я вижу, как процесс висит на myHost с использованием procxp.

Затем я использовал Visual Studio для подключения к этому процессу, я вижу, что он застрял в: serviceHost.Open();

Как я могу решить эту проблему, если мне нужно использовать Power Shell для удаленного запуска приложения?

Большое спасибо!

1 ответ

Если я не ошибаюсь, именованные каналы являются локальными для одного компьютера. Насколько я знаю, вы не можете подключиться "удаленно", используя именованные каналы.

В этом случае я бы рекомендовал использовать другую привязку (протокол). Например, вы можете использовать http/https, nettcp или WSHttp.

Другие вопросы по тегам