нужно объединить два класса вместе - PullRequest
0 голосов
/ 09 апреля 2011

Я пытаюсь назвать приложение обмена сообщениями сервер-клиент с помощью wcf.

Вот серверная часть.

namespace server
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)     /// once the form loads, create and open a new ServiceEndpoint.
        {
              ServiceHost duplex = new ServiceHost(typeof(ServerWCallbackImpl));
              duplex.AddServiceEndpoint(typeof(IServerWithCallback), new NetTcpBinding(), "net.tcp://localhost:9080/DataService");
              duplex.Open();
              this.Text = "SERVER *on-line*";
        }

        private void buttonSendMsg_Click(object sender, EventArgs e)
        {
            Message2Client(textBox2.Text); /// The name 'Message_Server2Client' does not exist in the current context :(
        }

        class ServerWCallbackImpl : IServerWithCallback /// NEED TO SOMEHOW MERGE THIS ONE WITH THE FORM1 CLASS
        {

            IDataOutputCallback callback = OperationContext.Current.GetCallbackChannel<IDataOutputCallback>();

            public void StartConnection(string name)
            {
                /// client has connected
            }

            public void Message_Cleint2Server(string msg)
            {
                TextBox1.text += msg; /// 'TextBox1' does not exist in the current context :(
            }

            public void Message2Client(string msg)
            {
                callback.Message_Server2Client(msg);
            }
        }

        [ServiceContract(Namespace = "rf.services",
            CallbackContract = typeof(IDataOutputCallback),
            SessionMode = SessionMode.Required)]
        public interface IServerWithCallback           ///// what comes from the client to the server.
        {
            [OperationContract(IsOneWay = true)]
            void StartConnection(string clientName);

            [OperationContract(IsOneWay = true)]
            void Message_Cleint2Server(string msg);
        }

        public interface IDataOutputCallback          ///// what goes from the sertver, to the client.
        {
            [OperationContract(IsOneWay = true)]
            void AcceptConnection();

            [OperationContract(IsOneWay = true)]
            void Message_Server2Client(string msg);
        }
    }
}

Я просто не могу понять, как мне объединить " class Form1: Form " и " class ServerWCallbackImpl: IServerWithCallback ", чтобы я мог вызвать Message2Client функция от нажатия кнопки, а также добавить TextBox1.text + = msg , когда * Message_Cleint2Server * происходит.

Спасибо!

Ответы [ 2 ]

1 голос
/ 09 апреля 2011

Вам не нужно объединять ваш класс с формой: вам нужно создать его экземпляр. Примерно так:

IServerWCallback server = new ServerWCallbackImpl();
server.Message2Client("hello world");

Однако (из структуры вашего кода на данный момент) вам, вероятно, потребуется создать экземпляр класса ранее. Это позволяет вам подключить этот экземпляр и сохранить его для дальнейшей работы.

Вы также можете прочитать страницы MSDN на классах и объектах (экземпляры классов), чтобы убедиться, что вы полностью поняли концепции, прежде чем продолжить - этот материал довольно фундаментально для программирования .NET.

1 голос
/ 09 апреля 2011

Зачем нужно объединение, почему вы не можете использовать наследование?

Решение множественного наследования в C # .net

Нажмите здесь для получения более подробной информации (stackoverflow)

Я думаю, что это даст вам ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...