0

クライアントとの接続を確立するために.NETRemotingを使用するサーバー側のコードがあります。通常、クライアントとサーバー間で渡されるオブジェクトでインターフェイスを使用するのが標準であり、より安全な代替手段であることを理解していますが、私が確立している単純な通信では、必要なクラスを定義する手間をかける必要はないと思います。インターフェイス。

したがって、次のコードでは、クライアントに文字列を返すだけなので、必要性は感じませんが、別の言い方をする人もいるので、ここに質問を投稿します。私は一般的な慣習に従うべきですか、それとも私がしている方法に固執するべきですか?また、以下に示すコードは、リモーティングを使用してサーバーを確立する正しい方法ですか?

(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;
    }
4

1 に答える 1

1

インターフェイスを使用しない場合の問題は、クライアントにサーバーコードを含める必要があることです。これは、このような単純な問題ではありませんが、サーバーインターフェイスがより複雑になったり、サーバーの実装が関係している場合は、実際の問題になる可能性があります。

これも展開の問題になります。サーバー実装で何かを変更するときはいつでも、新しいサーバー実装をすべてのクライアントにコピーする必要があります。インターフェイスを使用している場合、クライアントを更新する必要があるのは、インターフェイスを変更する場合のみです。サーバー実装の変更はクライアントに影響しません。少なくとも、クライアントがサーバーと対話する方法には影響しません。

これもセキュリティ上の問題を引き起こす可能性があります。サーバーコードに専有情報がある場合、そのコードはすべてのクライアントに公開されます。ただし、インターフェイスを使用する場合は、サーバーコードを含める必要はありません。

サーバーのインターフェースを定義しないようにすると、前もって簡単に見えるかもしれません。しかし、長期的には、インターフェイスを使用する方が安全で、変更が簡単で、展開も簡単です。特に、複数のクライアントがある場合はそうです。

そうは言っても、上司になぜRemotingを要求したのかを尋ねる必要があります。ただし、実行する前に、WCFとRemotingの違いをよく読んでください。WCFは、明らかにより堅牢なテクノロジです。

于 2012-06-29T12:54:47.337 に答える