none
comunicação entre windows service e windows form RRS feed

  • Pergunta

  • pessoal, bom dia..

    tenho uma aplicação Windows Service e preciso que uma outra aplicação Windows Form consiga acessar alguns "métodos" desse serviço windows.. alguém poderia ajudar?

    quinta-feira, 15 de dezembro de 2016 10:35

Respostas

  • Você vai dar uma volta maior sem razão (entendo que foi seu superior, mas realmente não faz sentido, a decisão dele é que está indo contra as boas práticas).

    Você pode implementar no Windows Service a comunicação usando named pipes, criar uma class library que comunique com este Windows Service e exponha os métodos para interop, daí a aplicação VB6 utiliza esta class library.

    Novamente, é uma volta desnecessária, mas fica aí a dica.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 15 de dezembro de 2016 12:53

Todas as Respostas

  • kngipa,

    Você precisa que elas se comuniquem (troquem informações efetivamente) ou só precisa que a aplicação Windows Forms possa utilizar métodos implementados no Windows Service?

    Caso seja a troca de mensagens, você pode utilizar named/anonymous pipes, por exemplo.

    How to: Use Named Pipes for Network Interprocess Communication

    How to: Use Anonymous Pipes for Local Interprocess Communication


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 15 de dezembro de 2016 11:08
  • preciso que a aplicação Windows Form apenas consiga acessar os métodos que estão no windows service.. como se fosse meu serviço fosse um DLL por exemplo..
    quinta-feira, 15 de dezembro de 2016 11:17
  • vi em um outra aplicação, que eu tem uma interface mais ou menos dessa forma..

        public interface IGedService
        {
            [OperationContract]
            [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "File")]
            ServiceResult AddFile(mFileDocument oFileDocument);
    
            [OperationContract]
            [WebInvoke(Method = "DELETE", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "File/oFileDocument/{oFileDocument}")]
            ServiceResult RemoveFile(mFileDocument oFileDocument);
    
            [OperationContract]
            [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "File/search")]
            ServiceResult SearchFile(mFileDocument oFileDocument);
    
        }
    isso estaria no meu serviço com os meus métodos implementados.. agora precisava conseguir chegar nesses métodos..

    quinta-feira, 15 de dezembro de 2016 11:19
  • Eu sugiro você criar um projeto do tipo Class Library e mover o código que deve ser compartilhado para lá. Assim você adiciona uma referência para este novo projeto no seu Windows Service e no Windows Form.

    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 15 de dezembro de 2016 11:20
  • sim!

    seria uma ótima opção.. mas quem irá consumir esses métodos, é uma aplicação em Vb6 (trágico)..

    quinta-feira, 15 de dezembro de 2016 11:25
  • Faltou essa informação na sua pergunta, na verdade você disse que quem consumiria é um Windows Form, mas de qualquer modo, separando essa implementação numa DLL a parte, você pode marcar os métodos para interop.

    Veja um passo a passo: https://support.microsoft.com/pt-br/kb/817248


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 15 de dezembro de 2016 11:28
  • a recomendação (superior rs..) é que o acesso seja pelos serviço.. por isso tbm não pensei na DLL
    quinta-feira, 15 de dezembro de 2016 11:58
  • Você vai dar uma volta maior sem razão (entendo que foi seu superior, mas realmente não faz sentido, a decisão dele é que está indo contra as boas práticas).

    Você pode implementar no Windows Service a comunicação usando named pipes, criar uma class library que comunique com este Windows Service e exponha os métodos para interop, daí a aplicação VB6 utiliza esta class library.

    Novamente, é uma volta desnecessária, mas fica aí a dica.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 15 de dezembro de 2016 12:53
  • hehehehe

    complicado né!! de todo modo obrigada!!

    quinta-feira, 15 de dezembro de 2016 13:05