【问题标题】:need to merge two classes together需要将两个类合并在一起
【发布时间】:2011-08-02 00:01:18
【问题描述】:

我正在尝试使用 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 函数,并在 *Message_Cleint2Server* 发生时添加 TextBox1.text += msg

谢谢!

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    什么需要合并为什么不能使用继承?

    解决 C#.net 中的多重继承问题

    Click this for more details (stackoverflow)

    我想这会给你答案

    【讨论】:

    • 你不能同时继承两个类。 Form1 已经继承 Form
    • 扩展方法是您所链接问题的公认答案。对于将业务类(服务器逻辑)与 UI(表单)结合起来,这不是一个好的解决方案!
    【解决方案2】:

    您不需要将您的类与表单合并:您需要创建它的一个实例。像这样:

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

    但是(从您目前的代码结构来看),您可能需要早先创建该类的一个实例。这允许您连接该实例并保留它以供以后操作。

    您可能还想阅读 classesobjects(类实例)上的 MSDN 页面,以确保在继续之前完全理解这些概念 - 这些内容对于 .NET 编程非常基础。

    【讨论】:

    • 不太明白,我如何制作这个 IServerWCallback 实例? :(
    • @Roger:IServerWCallback server = new ServerWCallbackImpl() 行创建了ServerWCallbackImpl 的一个新实例。但是,它只会持续与您的一种方法一样长,因此您可能希望在该方法之外创建它(这样您就不会立即断开连接)。恐怕如果您对类和接口不满意,那么您将在整个 C# 开发中遇到困难:这是基本概念。我建议您阅读一些 MSDN 介绍性文章,这些文章将有助于更好地解释这一切,也许稍后再回到您的消息传递应用程序。
    • 感谢您的建议!我读过对象和类。
    • IServerWCallback server = new ServerWCallbackImpl(); server.Message2Client("你好世界");此行“IDataOutputCallback callback = OperationContext.Current.GetCallbackChannel();”报错,建议使用“new”创建实例。
    • 但是,如果我添加这个“新”,它会显示“错误 1 ​​'System.ServiceModel.OperationContext.Current' 是一个“属性”,但用作“类型””...
    猜你喜欢
    • 1970-01-01
    • 2020-03-25
    • 2019-06-20
    • 2017-08-05
    • 2019-11-15
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多