【问题标题】:How can I have an WCF service with multiple classes?如何拥有具有多个类的 WCF 服务?
【发布时间】:2019-06-09 07:59:15
【问题描述】:

我想要这样的东西

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);
    }
}

我尝试这种方式的原因是因为我有太多的外部类,我不想在每次调用服务时都为它们创建对象只是为了获取用户名。有什么建议吗?

【问题讨论】:

  • “它不起作用”是什么意思?它没有编译,或者有运行时错误或什么?

标签: c# wcf interface multiple-inheritance servicecontract


【解决方案1】:

如果您希望他们签订一份服务合同,我相信您可以做到

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);
        }
    }
}

【讨论】:

  • 是的@spodger,希望他们签订一份服务合同。我遵循了您的代码,但问题是我不能有两个类(不是接口)。只有一个类实现了 4 种方法,只是为了调用其中一种,我应该创建两个外部对象。
  • 好的,我想我明白你的意思了 - 我会更新我的答案。
  • 这正是我想要的,所以应该可以选择接受两次答案:D 非常感谢
  • 太棒了!谢谢。
猜你喜欢
  • 2014-05-25
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多