web服务-调用c#接口的函数

本文关键字:接口 函数 调用 服务 web | 更新日期: 2023-09-27 17:52:15

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

问题是,从服务器调用GUI函数有一些问题,它抛出了一些我找不到的异常(因为我正在调试GUI项目)。我写错什么了吗?还是完全不可能调用接口的函数?

UPDATE:我认为问题是运行和处理http消息的Webservice与我在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)
        {
        }
    }
任何形式的帮助都将是非常感激的…

web服务-调用c#接口的函数

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

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