1

私は .NET リモート処理と C# の初心者です。クライアント/サーバー アプリケーションが必要で、これを .NET Remoting で処理したいと考えています。リモート処理オブジェクトの EchoServer クラスのクラス ライブラリと、いくつかのテスト メソッドを作成しました。

Visual Studio でサーバー プロジェクトに追加したクラス ライブラリ。アセンブリ「System.Runtime.Remoting」も追加しました。

以下は私のサーバーのコードです:

        using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Drawing;
        using System.Linq;
        using System.Text;
        using System.Windows.Forms;
        using System.Runtime.Remoting;
        using System.Runtime.Remoting.Channels;
        using System.Runtime.Remoting.Channels.Tcp;
        using Remoting; //Namespace Lib

        namespace Server
         {
         public partial class Server : Form
{
    public Server()
    {
        InitializeComponent();

        TcpChannel serverChannel = null;

        try
        {
            serverChannel = new TcpChannel(9998);
            lvStatus.Items.Add("Server is listening on port 8089...");

            string strIn = "";

            ChannelServices.RegisterChannel(serverChannel, true);

            RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType("Remoting.EchoServer, remoting_dll"), "Echo", WellKnownObjectMode.SingleCall);
        }
        catch (Exception ex)
        {
            ChannelServices.UnregisterChannel(serverChannel);
            MessageBox.Show(ex.Message.ToString());
        }
    }
}

}

サーバーを起動すると、例外が発生します。

値を NULL にすることはできません パラメータ名: type

チュートリアルの他のコードを試してみましたが、リモート オブジェクトのクラスがクラス ライブラリとして実装されているか、プロジェクトに直接クラスとして実装されている場合と同じ例外が発生します。

4

1 に答える 1

0

Remoting の実装を投稿できますか? あなたの間違いは次だと思います:

"Remoting.EchoServer、remoting_dll"

したがって、Type.GetType を正しく使用する必要があります。

作業コードの例:

static void Main(string[] args)
{
    Server();
}

static void Server()
{
    Console.WriteLine("Server started...");
    var httpChannel = new HttpChannel(9998);
    ChannelServices.RegisterChannel(httpChannel);
    RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType("Server.Program+SomeClass"), "SomeClass", WellKnownObjectMode.SingleCall);
    Console.WriteLine("Press ENTER to quit");
    Console.ReadLine();
}

public interface ISomeInterface
{
    string GetString();
}

public class SomeClass : MarshalByRefObject, ISomeInterface
{
    public string GetString()
    {
        const string tempString = "ServerString";
        Console.WriteLine("Server string is sended: {0}", tempString);
        return tempString;
    }
}
于 2013-01-11T11:29:20.217 に答える