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