0

我有一个使用 .NET Remoting 建立与客户端的连接的服务器端代码。通常,我知道使用在客户端和服务器之间传递对象的接口是常态,并且是一种更安全的选择,但是对于我正在建立的简单通信,我认为不需要麻烦地定义必要的类和接口。

所以对于下面的代码,因为我只是向客户端返回一个字符串,我觉得没有必要,但有些人可能会说不然,所以我在这里发布我的问题。我应该遵循一般惯例还是坚持我正在做的事情?下面显示的代码也是建立远程服务器的正确方法吗?

(不要问我为什么用remoting而不是WCF。我老板专门要求remoting,我也不知道为什么。)

class HttpServer
{

    [STAThread]
    public static Boolean startService()
    {
        HttpChannel channel = new HttpChannel(80);

        ChannelServices.RegisterChannel(channel);
        Type ddcServerType = Type.GetType("DDCEngine.DDCServer");
        RemotingConfiguration.RegisterWellKnownServiceType(ddcServerType, "DDCServer", WellKnownObjectMode.Singleton);
        return true;
    }
}

public class DDCServer : MarshalByRefObject
{
    public string Hello()
    {
        string r = "hello";
        return r;
    }

    [Description("Sets a new IO Point List in the DDC.")]
    public string SetIOPointList(string host, DDCService.pointInformation[] pointList)
    {

        string result;

        DDCService.LGeDDCClient ddc = new DDCService.LGeDDCClient("LGeDDC", host);

        try
        {
            result = ddc.SetIOPoint(pointList);
        }
        catch (Exception ex)
        {
            result = ex.ToString();
        }
        return result;
    }
4

1 回答 1

1

不使用接口的问题是您需要在客户端上包含服务器代码。这不是像这样简单的问题,但如果服务器接口变得更复杂或涉及服务器实现,则可能是一个真正的问题。

这也成为一个部署问题。每当您更改服务器实现中的某些内容时,您都必须将新的服务器实现复制到所有客户端。如果您使用的是接口,那么您唯一需要更新客户端的时间就是更改接口。服务器实现更改不会影响客户端。至少,它们不会影响客户端与服务器交互的方式。

这也可能导致安全问题。如果服务器代码中有专有信息,则该代码会在每个客户端上公开。但是,如果您使用接口,则无需包含服务器代码。

避免为服务器定义接口可能看起来更容易。但从长远来看,使用接口更安全、更容易修改和更容易部署——尤其是当有多个客户端时。

说了这么多,你应该问问你的老板为什么他要求远程处理。但在您这样做之前,请阅读 WCF 和 Remoting 之间的区别。WCF 显然是一种更强大的技术。

于 2012-06-29T12:54:47.337 回答