none
Servicio WCF con dos interfaces RRS feed

  • Pregunta

  • Hola a tod@s!

    Soy bastante nuevo en esto de WCF y me ha surgido una duda. ¿Se pueden restringir métodos a un determinado tipo de usuarios? Es decir, yo en el servicio tengo los métodos A, B, C. Quiero que si se accede desde internet se vean los métodos A y B. Y si accedo desde consola, se compartan sólo los métodos B y C.

    Se me había ocurrido crear dos interfaces:

    Interfaz1 - Métodos A y B

    Interfaz2 - Métodos B y C

     

    Y un servicio WCF que implemente las dos interfaces. El problema es que no sé si se puede hacer y, si es posible, cómo se puede incluir en el App. Config

     

    Espero que hayáis entendido mi duda. Gracias y un saludo.

    lunes, 30 de agosto de 2010 9:50

Respuestas

  •  Hola puedes hacer lo siguiente:

     

    [ServiceContract()]
    public interface IA
    {
        [OperationContract()]
        metodoA()
    }

    [ServiceContract()]
    public interface IB
    {
        [OperationContract()]
        metodoB()
    }

    [ServiceContract()]
    public interface IAll: IA, IB{
    }

    public class ServiceAll:IAll
    {
        public void metodoA(){
            hacerAlgo()
        }

        public void metodoB(){
            hacerAlgo2()
        }
    }


    <endpoint name="IA" bindind="basicHttpBinding" contract="IA"/>
    <endpoint name="IB" bindind="basicHttpBinding" contract="IB"/>
    <endpoint name="all" bindind="basicHttpBinding" contract="IAll"/>
    <endpoint name="mex" bindind="mexHttpBinding" contract="IMetadataExchange"/>

    Saludos,

     

    Manuel.


    mzegarra
    • Marcado como respuesta Trycatcher viernes, 3 de septiembre de 2010 9:18
    jueves, 2 de septiembre de 2010 21:48

Todas las respuestas

  •  Hola puedes hacer lo siguiente:

     

    [ServiceContract()]
    public interface IA
    {
        [OperationContract()]
        metodoA()
    }

    [ServiceContract()]
    public interface IB
    {
        [OperationContract()]
        metodoB()
    }

    [ServiceContract()]
    public interface IAll: IA, IB{
    }

    public class ServiceAll:IAll
    {
        public void metodoA(){
            hacerAlgo()
        }

        public void metodoB(){
            hacerAlgo2()
        }
    }


    <endpoint name="IA" bindind="basicHttpBinding" contract="IA"/>
    <endpoint name="IB" bindind="basicHttpBinding" contract="IB"/>
    <endpoint name="all" bindind="basicHttpBinding" contract="IAll"/>
    <endpoint name="mex" bindind="mexHttpBinding" contract="IMetadataExchange"/>

    Saludos,

     

    Manuel.


    mzegarra
    • Marcado como respuesta Trycatcher viernes, 3 de septiembre de 2010 9:18
    jueves, 2 de septiembre de 2010 21:48
  • Muchas gracias Manuel,

     

    Voy a probarlo y te comento.

     

    Un saludo.

    viernes, 3 de septiembre de 2010 9:19