How to create virtual WCF service (external façade for internal services)

StackOverflow https://stackoverflow.com/questions/23518572

  •  17-07-2023
  •  | 
  •  

Question

I have several internal wcf services. I need to create an external service that contains only selected operations from internal services. I don't want to use copy/paste techniques. I've found sentinet, but I think it's big and expensive solution. Whether there is a cheap and simple solution?

Was it helpful?

Solution

public interface IService1 {
        void Operation1();
        void Operation2();
    }

    public class Service1 : IService1 {
        public void Operation1() { }
        public void Operation2() { }
    }

    public interface IService2 {
        void Operation3(String s);
        Int32 Operation4(Int32 n);
    }

    public class Service2 : IService2 {
        public void Operation3(string s) {

        }

        public int Operation4(int n) {
            return 0;
        }
    }

    public interface IMyPublicInterface {
        void Operation1();
        Int32 Operation4(Int32 n);
    }

    public class MyPublicInterface : IMyPublicInterface {
        public MyPublicInterface(IService1 service1, IService2 service2) {
            _service1 = service1;
            _service2 = service2;
        }

        private IService1 _service1;
        private IService2 _service2;

        public void Operation1() {
            return _service1.Operation1();
        }

        public int Operation4(int n) {
            return _service2.Operation4(n);
        }
    }

OTHER TIPS

You can use interface inheritance to build your internal services and rearrange the public parts for your external service.

An example:

[ServiceContract()] public interface IInternalService1 : IInternalService1Public, IInternalService1Private { }
[ServiceContract()] public interface IInternalService1Public { }
[ServiceContract()] public interface IInternalService1Private { }

[ServiceContract()] public interface IInternalService2 : IInternalService2Public, IInternalService2Private { }
[ServiceContract()] public interface IInternalService2Public { }
[ServiceContract()] public interface IInternalService2Private { }

[ServiceContract()] public interface IPublicService : IInternalService1Public, IInternalService2Public { }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top