在 Windows 窗体中运行 WCF

2023-12-30

我有一个程序作为客户端和服务器工作。我将 wcf 服务与 BasicHttpBinding 结合使用,并且该程序在控制台应用程序中运行。

当我将代码移至 Windows 窗体应用程序时,一切都停止工作。当客户端调用一个操作时,它不会返回。当调用服务器端的某些操作时,会导致调用者超时。

我解决了将客户端和服务器代码移动到专用线程的问题。
看来负责处理窗口事件的线程(表单所有者)不能与实例化 ServiceHost 对象的线程相同。
谁能告诉我为什么?

Thanks

PS:我使用的是.Net 3.5和Windows Vista


我原来的答案已经关闭了。经过一番研究,这里是真正的原因和参考:

这是因为您在 UI 线程上启动了 WCF ServiceHost。

在 Windows 中进行过多线程 UI 编程的人都知道,如果不使用 Control.Invoke 方法之类的方法同步回 UI 线程,就无法更新 UI。

默认情况下,WCF ServiceHost 处理线程池中自己线程上的所有请求。但是,当您在 UI 线程上启动 WCF ServiceHost 时,WCF 会检测到该 UI 线程具有与之关联的 SynchronizationContext。 WCF 检测到这一点,而不是使用线程池来处理请求,而是将所有传入请求分派到 UI 线程。其背后的原因是,这意味着 WCF 服务器组件代码可以安全地更新接口。

因此,即使您的 WCF 服务可能根本不与 UI 进行任何交互,WCF 也会使用此机制,因为它是在 UI 线程上启动的。

简单的修复方法是应用 ServiceBehavior 属性,并将 UseSynchronizationContext 设置为 false。或者在另一个线程上启动 ServiceHost(正如您所发现的)。

以下是更多详细信息:http://bytes.com/topic/net/answers/750778-wcf-inproc-client-server-main-thread-client-call-hangs http://bytes.com/topic/net/answers/750778-wcf-inproc-client-server-main-thread-client-call-hangs
http://www.softinsight.com/bnoyes/PermaLink.aspx?guid=4bea53fa-2553-4d7b-bfe2-b0f0e9d11d0a http://www.softinsight.com/bnoyes/PermaLink.aspx?guid=4bea53fa-2553-4d7b-bfe2-b0f0e9d11d0a

对于最初的误导表示抱歉。希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Windows 窗体中运行 WCF 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • 在 SQL 2005+ 中,CLR 存储过程是否优于 TSQL 存储过程?

    我目前的观点是否定的 更喜欢 Transact SQL 存储过程 因为它们是重量更轻且 可能 性能更高的选项 而 CLR 过程允许开发人员进行各种恶作剧 然而最近我需要调试一些写得非常糟糕的 TSQL 存储过程 像往常一样 我发现许多问题是
  • 如何以编程方式对 WebBrowser 控件安全警报回答“是”

    我正在使用 WebBrowser 控件以编程方式访问单个网站 但每当我登录时 我都会收到此证书安全警报 由于我信任该网站 并且我还需要以编程方式自动登录 因此此对话框会妨碍我 我搜索了解决方案并发现一个和我类似的问题 https stack
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • .NET 中是否有内置函数可以对密码进行哈希处理?

    我看到这个问题加密 散列数据库中的纯文本密码 https stackoverflow com questions 287517 encrypting hashing plain text passwords in database 我知道我
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • 加载 DLL 及其依赖项

    如何加载 dll 及其依赖项 我不想将每个依赖的 dll 都放在 Assembly Load 中 我宁愿只加载一个 dll 然后加载依赖项 当我的应用程序启动时 上面的 dll 不会被加载 它们仅在用户执行特定操作时加载 然后冻结 gui
  • 如何动态创建 Dapper 查询的参数

    我有一个值字典 例如 Name Alex 有没有办法将其作为查询参数传递给 Dapper 这是一个显示我想要做什么的示例 IDictionary
  • 泛型和系统集合

    迁移到 NET 2 0 后 是否还有理由继续使用 systems Collections 命名空间 除了维护遗留代码之外 是否应该始终使用泛型命名空间 在大多数情况下 泛型集合的执行速度比非泛型集合更快 并且为您带来强类型集合的好处 比较
  • 脚手架 EntityFramework 6 无法将“System.Data.Entity.Core.Objects.ObjectContext”类型的对象强制转换为“System.Data.Objects.ObjectContext”

    我想在 EntityFrameWork 6 中使用脚手架 但是得到这个 无法检索 myNameSpace Models prod 的元数据 无法将 System Data Entity Core Objects ObjectContext
  • .NET 的 BLOB 分布式存储?

    我正在寻找一个经过相当好的测试的库 服务器来存储持久的分布式哈希表 我对使用基于 SQL 的解决方案犹豫不决 因为数据是高度面向文档的 由数百万个约 64KB 的 blob 组成 只有一个索引 由所述 BLOB 的哈希计算 并且需要能够进行
  • 为什么.NET Framework 4.0安装程序的大小小于3.0/3.5?

    我看到 Net Framework 4 0的beta2安装程序只有55MB 而 Net 3 5的安装程序有200 MB 这是怎么回事 NET 3 5 之所以这么大 是因为它在同一个包中包含 x64 版本的框架 2 0 3 0 软件包针对 x
  • 判断位图是否全黑的有效方法是什么?

    我想知道是否有一种超级有效的方法来确认 Image 对象引用全黑图像 因此位图中的每个像素都是 ARGB 255 0 0 0 你会推荐什么 大多数位图的尺寸为 1024 x 6000 像素 尽管假设它们始终是该尺寸并不安全 我需要这个 因为
  • SVCUtil“更新服务参考”等效命令参数

    我想使用 SVCUtil 更新 Visual Studio 2010 解决方案中的服务引用 因为该解决方案有多个项目 并且一一刷新引用并不好 我想知道您的观点 因为我必须确保执行与 Visual Studio 2010 执行的命令完全相同的
  • 键入时自动滚动 DataGridView

    我遇到这个问题 DataGridView 中的最后一列太长 您需要使用滚动条来显示该列的其余部分 但是当我输入文本时 它不会在输入时自动滚动 我想要的是 我想在打字时自动滚动滚动条 以便用户在打字时不必使用滚动条 这是图像 As you c
  • 如何对数据集运行查询?

    我有一个DataSet named dsView包含数据 这是我用来读取 XML 的代码 dsView new DataSet dsView ReadXml c MyXml xml 该数据有一个名为MEN有字段Fname and Lname
  • 将 SQL Server 与 Dart 结合使用

    我还没有找到很好的答案 所以我想尝试一下得到答案 将 Microsoft SQL Server 与 Dart 结合使用的最佳方式是什么 我需要它能够从基本上任何操作系统 网络和移动设备上使用它 我觉得最好的方法可能是 GraphQL 但我对
  • 如果将其名称作为参数传递,如何在方法中打开表单

    我正在尝试创建一个标准方法来根据传递给它的参数打开表单 基本上 要完成此任务 using Quotes newQte new Quotes newQte ShowDialog 通过替换 Quotes with a passed parame

随机推荐

  • 在非 Symfony 项目中使用 Symfony 2 组件?

    为了在 PHP 中获得 XLIFF 2 支持 请在另一个答案 https stackoverflow com a 22057407 282729 有人建议 使用 Symfony 2 翻译组件 所以我下载了来自Github https git
  • ES6中的新规范“块级函数声明”是什么意思?

    我正在查看 es6 兼容性表尝试学习Here https kangax github io compat table es6 block level function note in the bindings部分它说 块级函数声明 除了官方
  • 如何在帧之间保持影片剪辑的颜色?

    我的应用程序有 2 个框架 在第 1 帧中有 5 个 MC 在DOUBLE CLICK事件目标颜色发生变化并转到下一帧 2 在第 2 帧中 我有一个返回到第 1 帧的按钮 当我返回到第 1 帧时如何保持 MC 颜色 public class
  • set -e 和 exec "$@" 对 docker 入口点脚本有什么作用?

    我注意到许多 docker 的entrypoint sh 脚本都会执行以下操作 bin bash set e code exec 什么是set e和exec for 它基本上需要传递给的任何命令行参数entrypoint sh并将它们作为命
  • 是否可以在函数内部定义异常

    在 OCaml 中实现 提前返回 的一种方法是通过异常 exception Exit let myfunc try for i 0 to do if then raise Exit done false with Exit gt true
  • C# 命名空间中的枚举与类中的枚举有什么区别

    我有一个关于枚举的问题 代码如下 namespace space public enum MyEnums Enum1 Enum2 namespace space public class MyClass public enum MyEnum
  • 角度的 $on 和 $broadcast

    我有一个 footerController 和 codeScannerController 具有不同的视图 angular module myApp controller footerController scope function sc
  • jsf 中嵌套 el

    我在嵌套 EL 时遇到问题
  • 在 JavaScript 中将 Dialogfow 持续时间系统实体从分钟转换为秒

    我正在寻找将 JavaScript 代码中的 Dialogflow 中的 Duration sys duration 系统实体从几分钟转换为几秒的方法 我询问用户一段时间 用户可以回答 例如 20分钟 5分钟 etc 该输入被保存到变量 t
  • 在控制台应用程序中与空的 Windows 消息队列作斗争

    在下面的 可编译的 示例中 我尝试在普通控制台应用程序中侦听 Windows 消息队列 以便接收有关 USB 设备连接 断开连接的通知 我从这里获取了示例代码 在 C 非 GUI 应用程序中检测 USB 插入 移除 https stacko
  • 在swift中,是否可以通过直接从数组复制来创建SKSpriteNode?

    目前我在 Swift 中的一个项目遇到了一点麻烦 我想知道你是否可以创建一个全新的精灵节点 如下所示 var spriteNode SKSpriteNode nodes 3 其中节点是 SKSpriteNodes 的数组 并且在索引号 3
  • erlang中的双向链接数据结构

    嗨 我想制作一棵树 在父母和孩子之间保留双向引用 但这似乎不可能实现 因为当我创建第一个对象时 我没有另一个对象 因此无法引用它 这是一些示例代码 record node name children root main gt A node
  • Scala 中其他实例的受保护成员

    我在学习Scala的过程中遇到了一个困难 我有一个继承层次结构 本质上与此等效 class A protected def myMethod println myMethod from A class B extends A def inv
  • 使用 Catch2 时未解决的外部符号错误

    我正在尝试在 Visual Studio 中进行 Catch2 单元测试 我创建了一个小测试项目来练习 当我尝试编译此测试项目时 出现链接器错误 我现在正在尝试诊断此链接器错误 但是Catch2 hpp头文件包含数千行代码 我希望更熟悉 C
  • Cocoa Touch 相当于 NSArrayController 吗?

    开始稍微使用 Core Data 虽然我已经弄清楚如何在常规 Cocoa 应用程序中使用它 但它在 Cocoa Touch 中的工作方式似乎有点不同 如何将实体绑定到对象 例如 Cocoa Touch 中的表格单元格 不幸的是 iPhone
  • Lua 中的 for...in 是什么意思?

    我正在玩下面的代码并感到困惑 function square iteratorMaxCount currentNumber if currentNumber
  • MVC3起始页

    我正在 Visual Studio 2010 中开发一个 Web 应用程序 它的 mvc3 我试图弄清楚如何发布它 并通过各种说明我尝试将视图 主页 索引设置为起始页 这是一个坏主意 现在没有任何效果 即使尝试像我一样查看该站点 使用 F5
  • 单元测试时如何将控制器注入指令中

    我想测试这样声明的 AngularJS 指令 app directive myCustomer function return template cust html controller customerController 在测试中 我想
  • Junit @BeforeClass 和 @AfterClass 在多个测试用例的情况下的行为

    Folks 假设我有一个定期运行的复杂的子类测试套件 作为其中的一部分 我试图确保每个测试类严格地一个接一个地执行 并且Test2 s BeforeClass方法之前不会启动Test1 s AfterClass已经完成了 这是一个有效的假设
  • 在 Windows 窗体中运行 WCF

    我有一个程序作为客户端和服务器工作 我将 wcf 服务与 BasicHttpBinding 结合使用 并且该程序在控制台应用程序中运行 当我将代码移至 Windows 窗体应用程序时 一切都停止工作 当客户端调用一个操作时 它不会返回 当调