Как я могу иметь службу WCF с несколькими классами? - PullRequest
0 голосов
/ 15 января 2019

Я хочу что-то подобное

Service1.svc.cs

namespace MyService
{
    public class User : IUser
    {
        ExternalLibrary.User externalUser = new ExternalLibrary.User();

        public string GetName()
        {
            return externalUser.GetName();
        }

        public bool SetName(string name)
        {
            return externalUser.SetName(name);
        }
    }

    public class Device : IDevice
    {
        ExternalLibrary.Device externalDevice = new ExternalLibrary.Device();

        public string GetDeviceName()
        {
            return externalDevice.GetDeviceName();
        }

        public bool SetDeviceName(string name)
        {
            return externalDevice.SetDeviceName(name);
        }
    }
}

Теперь я пытаюсь найти способ реализовать эти классы на интерфейсе WCF. Я пытался это не работает:

namespace MyService
{
    [ServiceContract]
    public interface IMyService : IUser, IDevices
    {
        // nothing here
    }

    public interface IUSer
    {
        string GetName();
        bool SetName(string name);
    }

    public interface IDevice
    {
        string GetDeviceName();
        bool SetDeviceName(string name);
    }
}

Причина, по которой я пытаюсь сделать это, заключается в том, что у меня слишком много внешних классов, и я не хочу создавать объекты для всех них каждый раз, когда я вызываю службу, просто чтобы получить имена пользователей. Любое предложение?

1 Ответ

0 голосов
/ 15 января 2019

Если вы хотите их по одному контракту на обслуживание, я думаю, что вы можете сделать

namespace MyService
{
    [ServiceContract]
    public interface IMyService : IUSer, IDevice
    {
        [OperationContract]
        string GetName();
        [OperationContract]
        bool SetName(string name);
        [OperationContract]
        string GetDeviceName();
        [OperationContract]
        bool SetDeviceName(string name);
    }

    public interface IUSer
    {
        string GetName();
        bool SetName(string name);
    }

    public interface IDevice
    {
        string GetDeviceName();
        bool SetDeviceName(string name);
    }
}

Затем объявите две частичные версии класса MyService, каждый из которых реализует соответствующий интерфейс, например,

namespace MyService
{
    public partial class MyService : IUser
    {
        ExternalLibrary.User externalUser = new ExternalLibrary.User();

        public string GetName()
        {
            return externalUser.GetName();
        }

        public bool SetName(string name)
        {
            return externalUser.SetName(name);
        }
    }

    public partial class MyService : IDevice
    {
        ExternalLibrary.Device externalDevice = new ExternalLibrary.Device();

        public string GetDeviceName()
        {
            return externalDevice.GetDeviceName();
        }

        public bool SetDeviceName(string name)
        {
            return externalDevice.SetDeviceName(name);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...