2012-06-29 52 views
0

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

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

(不要问为什么我使用的,而不是WCF远程处理。我的老板明确要求远程处理,我不知道为什么。)

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; 
    } 
+0

我想这很好,这很简单,但你有一个平均的老板。考虑未来的变化以及有什么机会来扩展这一点。那么你最好从一开始就做好。 –

回答

1

的问题不使用的接口是然后您需要在客户端上包含服务器代码。这对于这样简单的事情来说并不是问题,但如果服务器接口变得更加复杂或涉及服务器实现,那么这可能是一个真正的问题。

这也成为部署问题。无论何时您在服务器实现中更改某些内容,都必须将新服务器实现复制到所有客户端。如果您使用的是界面,那么只有在更改界面时,才需要更新客户端。服务器实施更改不会影响客户端。至少,它们不会影响客户端与服务器进行交互的方式。

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

为了避免为服务器定义接口,它可能看起来更容易一些。但从长远来看,使用接口更安全,更容易修改,更易于部署 - 特别是在有多个客户端的情况下。

说了这么多,你应该问问你的老板他为什么要求Remoting。但请仔细阅读WCF和Remoting之间的区别。 WCF显然是更强大的技术。