我有一个包含两个项目的解决方案:服务器和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)
{
}
}
任何形式的帮助都会非常感激......
答案 0 :(得分:2)
服务不会以这种方式与表示层交互。要使服务器能够在winforms应用程序中调用函数,您必须序列化整个应用程序及其功能并将其传递给服务器。即使这样,你也无法通过网络传递状态(re:this
)(无状态)。我读取你的方法名称的假设是你试图使用gui注册一个新用户,然后让gui更新当前内存中用户的当前注册表。
这样做的正确方法是让gui和web服务都针对用户对象的界面进行操作。让gui“注册”用户(我假设这意味着插入数据库),然后将用户对象返回给gui本身。然后gui负责确保将返回的用户正确添加到任何本地存储的内存中。