1

我正在尝试开发一个轻型客户端/服务器程序。一个“管理员”程序应该能够向安装了客户端程序的多个本地客户端计算机发送通用命令。

我有一个枚举来控制常见的命令,如下所示:

public enum Command
{
    Reboot,
    StartService,
    ShowMsg
}

有了它,我可以像这样从管理程序发送命令:

Command.Reboot

在客户端程序上,我可以有一个 switch 语句来执行该命令所要求的操作。

但是,对于枚举的某些部分,我需要一个字符串属性来发送。

就像从管理程序一样,我想发送这样的东西:

Command.ShowMsg("Hi, this is a string message")

我该如何做到这一点?我希望你能理解我的问题。

4

3 回答 3

1

您可以有一个包含枚举的类,如下所示:

enum CommandType
{
    Reboot,
    StartService,
    ShowMsg
}
[DataContract]
class Command
{
    [DataMember]
    public CommandType CmdType
    {
        get;
        set;
    }
    [DataMember]
    public string Value
    {
        get;
        set;
    }
    public CommandType(CommandType cmd, string value = null)
    {
        CmdType = cmd;
        Value = value;
    }
}

然后在需要时像这样使用它:

new Command(CommandType.ShowMsg, "Hi, this is a string message.");
于 2013-05-19T11:19:48.270 回答
0

您可以通过更改服务合同来做到这一点。所以在合同中你可以拥有

interface IFooService
{
    void Execute(Command cmd);
    void ExecuteWithParam(Command cmd, string param1);
}

然而,这会给试图了解如何使用此类 API 的人们带来问题。如果您稍后尝试重构服务,也会出现维护问题。因此,更好的选择是对每个枚举值使用一个专用方法,而不是使用泛型Execute方法(或任何你称之为的方法)并传递一个枚举,如下所示:

interface IFooService
{
    void Reboot();
    void StartService(string[] args);
    void ShowMsg(string msg);
}
于 2013-05-19T11:18:48.370 回答
0

我会在一堂课上做到这一点。

public class ServiceObject{

public String command {get;set;}
public String message {get;set;}

  public ServiceObject(String command,String message){
   this.command = command;
   if(message!=null)
     this.message = message;

  }

}

您可以通过以下方式创建此对象

new ServiceObject("ShowMessage","This is a Service Object");

或者

new ServiceObject("Restart",null);

现在在您的服务器端只接受一个服务对象

ServiceObject.command您可以通过执行和检查其属性ServiceObject.message

于 2013-05-19T11:19:58.360 回答