【问题标题】:Using threads and event handlers within a WCF Web Service在 WCF Web 服务中使用线程和事件处理程序
【发布时间】:2010-06-17 07:20:25
【问题描述】:

在制作 WCF Web 服务时,我在使用带有 webbrowser 控件的方法时遇到了一个问题。该方法启动一个线程并使用 webbrowser 控件填写一些表单并进一步单击,等待事件处理程序触发并返回我需要的答案。该方法经过测试并在其自己的环境中工作,但在 WCF Web 服务环境中使用时,事件处理程序不会触发。结果是等待手动重置事件没有结束。这是因为新线程还是因为 Web 服务的错​​误事件处理?如果是,什么是合理的解决方案?

【问题讨论】:

  • 只是检查一下 - WebBrowser客户端,是吗?
  • Web 应用程序使用 Web 服务。 Web 服务需要它自己的带有事件处理程序的浏览器元素来填充和从另一个站点获取信息。所以:Browser1 --> Web App --> Web Service --> 在其他站点上执行操作(新浏览器 --> 打开 url --> 填写 URL --> 按确定 --> 捕获响应 --> 处理答案) --> 向网络服务返回答案
  • 您最好使用HttpWebRequestWebClient,因为它们还可以让您执行同步请求。

标签: c# wcf multithreading event-handling


【解决方案1】:

Browser1 --> Web 应用程序 --> Web 服务 --> 在其他站点上执行操作(新浏览器 --> 打开 url --> 填写 URL --> 按确定 --> 捕捉响应 --> 处理答案)

如果您的系统中创建“新浏览器”的部分作为服务运行,无论是作为 Windows 服务、自托管 WCF 服务进程还是在 IIS 内部;那么您很可能不会收到 GUI 事件,因为没有 GUI。除其他外,GUI 事件处理程序需要在这些场景中不可用的 Windows 消息泵。

尝试在 Windows 窗体主机下托管您的服务以查看,我怀疑它会起作用。

如果您的系统必须在 IIS 或 Windows 服务(非 GUI)下运行,那么您始终可以与具有消息泵的代理主机进程通信,它可以为您完成所有浏览工作。完成后,您的“答案”可以发送回网络应用程序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 2016-02-07
    • 1970-01-01
    相关资源
    最近更新 更多