Как установить разрешения для службы Windows WCF? - PullRequest
0 голосов
/ 11 сентября 2011

У меня есть служба Windows, которая предоставляет службу WCF.

У меня также есть приложение, которое обращается к службе WCF, отправляет команды и получает данные обратно.

Все это прекрасно работает, когда я запускаю приложение из Visual Studio.

Однако, когда я устанавливаю приложение и запускаю его, приложение не может связаться со службой. Также не могут пакетные файлы, которые приложение запускает для остановки и запуска службы.

Я пытался использовать netsh для «резервирования» URI, но я действительно не знаю, что я делаю: -)

Можете ли вы указать мне правильное направление?

Код Windows Server WCF Сервисный код (сокращенно):

// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "WCF_Service" in both code and config file together.
[ServiceContract]
public class InternetGauge_IO
{

    [OperationContract]
    public void Pause()
    {
        RunningState.paused = true;
    }

    [OperationContract]
    public void Continue()
    {
        RunningState.paused = false;
    }

    [OperationContract]
    public bool GetRunningState()
    {
        return RunningState.paused;
    }
    ....

Код Windows Server WCF Создание кода конечной точки:

        private void InitializeConsoleComms()
    {
        try
        {
            //Prepare comms with the Console application
            Type serviceType = typeof(InternetGauge_IO);
            host = new ServiceHost(serviceType, new Uri[] { new Uri("http://localhost:8080/") });

            // Add behavior for our MEX endpoint
            ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
            behavior.HttpGetEnabled = true;
            host.Description.Behaviors.Add(behavior);

            // Create basicHttpBinding endpoint at http://localhost:8080/RJB.InternetGauge/
            host.AddServiceEndpoint(serviceType, new BasicHttpBinding(), "RJB.InternetGauge");

            // Add MEX endpoint at http://localhost:8080/MEX/
            host.AddServiceEndpoint(typeof(IMetadataExchange), new BasicHttpBinding(), "MEX");

            host.Open();
            logger.LogEvent("Console comms ready", "Internet Gauge", 4, 1);
        }
        catch (Exception e)
        {
            logger.LogEvent("Failed to open Console comms", "Internet Gauge", 1, 1);
            logger.LogEvent("Exception : " + e.InnerException + " Stack Trace: " + e.StackTrace + " Message: " + e.Message, "RJB.InternetGauge.WindowsService.Main", 1, 1);
        }
    }

Приложение просто использует сгенерированный прокси и методы, например

private bool GetRunningState()
    {
        try 
        {           
            InternetGauge_IOClient client = new InternetGauge_IOClient();
            isRunning = true;
            return(client.GetRunningState());
        }
        catch (Exception)
        {
            trayIcon.Text = "Internet Gauge Windows Service does not appear to be running.";
            trayIcon.Icon = RJB.InternetGauge.Console.Properties.Resources.ServiceStopped;
            isPaused = true;
            isRunning = false;

            return isPaused;
        }
    }

Команда netsh, которую я пытался

netsh http add urlacl url=http://+:8080/InternetGauge_IO user=PC-01\richard

Есть идеи?

Спасибо Ричард

1 Ответ

1 голос
/ 12 сентября 2011

Это потому, что я дурак.

Не скопировал app.config во время программы установки.

Теперь все работает нормально.

...