调用接口C的函数#

时间:2015-06-01 14:45:00

标签: c# web-services user-interface interface

我有一个包含两个项目的解决方案:服务器和GUI。在GUI项目中有一个WinForm应用程序,在服务器项目中有一个Web服务。我知道它有点不正确,但它的工作方式如下:我的GUI有一个服务器实例,我的服务器有一个GUI实现的接口的引用。在GUI构造函数中,它初始化webservice并设置其对自身的引用,以便服务器可以调用GUI的函数。

问题是从服务器调用GUI函数存在一些问题,并且它抛出了一些我无法找到的异常(因为我正在调试GUI项目)。我写错了吗?或者是否完全不可能调用接口的功能?

更新:我认为问题在于运行和处理http消息的Web服务与我在GUI中以某种方式创建的实例不同。也许使web服务静态会有帮助吗?

代码: 服务器:

public class WS : System.Web.Services.WebService
{
    ALUMA_GUI gui;

    [WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public void registerUser()
    {
        try
        {
            gui.addUser(tempUser); //This is where it fails
        }
        catch(Exception e)
        {
            HttpContext.Current.Response.Write(e.Message);
        }
    }
 }

GUI(实现ALUMA_GUI):

public MainForm()
    {
        try
        {
            InitializeComponent();
            server = new WS();
            server.setGUI(this);
        }
        catch (Exception e)
        {
        }
    }

任何形式的帮助都会非常感激......

1 个答案:

答案 0 :(得分:2)

服务不会以这种方式与表示层交互。要使服务器能够在winforms应用程序中调用函数,您必须序列化整个应用程序及其功能并将其传递给服务器。即使这样,你也无法通过网络传递状态(re:this)(无状态)。我读取你的方法名称的假设是你试图使用gui注册一个新用户,然后让gui更新当前内存中用户的当前注册表。

这样做的正确方法是让gui和web服务都针对用户对象的界面进行操作。让gui“注册”用户(我假设这意味着插入数据库),然后将用户对象返回给gui本身。然后gui负责确保将返回的用户正确添加到任何本地存储的内存中。