湖边的白杨树

探索是一种乐趣

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  218 随笔 :: 1 文章 :: 14 评论 :: 59万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

需要做一个多程序间的通讯,采用WCF和WCF Service是目前的选择。

需求:和产品进行通讯,和用户有交互操作,并将最后结果传送个DB

基本思路:

1. 用WPF客户端程序和产品进行通讯,获取必要的结果。

2. WPF客户端程序里调用WCF 的Proxy, 将结果传送个WCF Service。

3. 另外一个程序通过另一个WCF Proxy获取结果,并传送到DB

Control System(Service)             <-------------------->   WCF Service (Host in Windows Service) <----------------------->   UI Application

          |                                                                                                                                                                          | (Comunication)

       WCF Client(Proxy, GetResult) Device.

          |

       Upload to DB

基本实现:

1.  创建WCF Service Library, 实现 WCF Service 的接口。

2.  创建Windows Service, 并将WCF Service Host 到 Windows Service.

3.  创建WPF UI 程序,实现和Device的通讯。

问题和Debug:

1. Service出现问题的时候,可以用EventViewer来协助Debug。

 

参考:

1. http://blog.csdn.net/hebeijg/article/details/6161228

2. http://www.codeproject.com/Articles/38160/WCF-Service-Library-with-Windows-Service-Hosting

 

--------------------

 

Debug WCF 通讯的时候,应该采用 SvcTraceViewer.exe 工具

https://docs.microsoft.com/en-us/dotnet/framework/wcf/service-trace-viewer-tool-svctraceviewer-exe

三步:
1. 在 Host 端的Config文件里面添加 <system.diagnostics> node内容。具体参考上面连接。注意指定 svclog 文件的路径。
2. 运行WCF 程序 (Host, Client)进行通讯。
3. 用SvcTraceViewer工具打开生成的svclog文件。就可以定位到错误发生行。

 

--------------

另外还可以通过在ServiceHost端增加internalerror 来得到准确的错误。

 

复制代码
                   // Enable "IncludeExceptionDetailInFaults".
                    ServiceDebugBehavior debug = serviceHost.Description.Behaviors.Find<ServiceDebugBehavior>();

                    // if not found - add behavior with setting turned on 
                    if (debug == null)
                    {
                        serviceHost.Description.Behaviors.Add(
                             new ServiceDebugBehavior() { IncludeExceptionDetailInFaults = true });
                    }
                    else
                    {
                        // make sure setting is turned ON
                        if (!debug.IncludeExceptionDetailInFaults)
                        {
                            debug.IncludeExceptionDetailInFaults = true;
                        }
                    }
复制代码

 

posted on   fdyang  阅读(399)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示