继续Wcf记录点滴

之前说wcf以tcp协议作为通信方式的话会出现很多奇怪的bug,今天我把自己遇到的比较特殊的一个exception和解决方案列出来。主要是自己记录一下,顺便方便遇到这个问题的有缘人吧!废话不多说直接上代码:

首先看看我遇到的exception截图:

出现这种异常属于你的服务端程序出错了,但是又看不见异常源在哪,所以你需要在你的配置文件中添加相应的配置,以便让服务的异常信息返回到客户端。

下面两种情况:

1.如果你的配置文件是以config文件存在的话,需要添加配置节点

 1  <behaviors>
 2             <serviceBehaviors>
 3                 <behavior name="CalculatorServiceBehavior">
 4                     <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点-->
 5                     <serviceMetadata httpGetEnabled="true"/>
 6                     <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息-->
 7                     <serviceDebug includeExceptionDetailInFaults="true"/>
 8                 </behavior>
 9             </serviceBehaviors>
10         </behaviors>

关键<serviceDebug includeExceptionDetailInFaults="true"/>
2.如果你是配置文件以代码的形式配置的话这个可能会比较麻烦。因为我的配置文件也是代码的形式配置的(ServcieHost),所以在添加这个节点配置的时候遇到了点小问题:

刚开始不了解ServcieHost,我单步调试进去看了一下ServiceHost的结构信息,我截图给大家看看吧

我们可以看到已经有6个behavior了,红框部分就是前面说在config文件需要配置的节点。而且他的IncludeExceptionDetailInFaults默认值为false。恍然大悟,就是因为这个false所以在客户端看不见异常信息的源了。我需要将他修改成true,怎么修改了?且看代码:

1  ServiceDebugBehavior debugBehavior = srvHost.Description.Behaviors[typeof(ServiceDebugBehavior)] as ServiceDebugBehavior;
2 debugBehavior.IncludeExceptionDetailInFaults = true;
3 srvHost.Description.Behaviors.add(debugBehavior);

这几行代码添加好后,心想这样应该在客户端就可以看见异常信息了吧:事实证明我还是"图样图森破"。结果又跑异常了!

前面刚刚讲到,ServiceHost默认有几个behavior了,再往里面添加不就炸了吗?所以换种方式,程序员最不缺少的是啥,就是想法呀!哈哈。这次我换了种方式。

1 ServiceDebugBehavior debugBehavior = srvHost.Description.Behaviors[typeof(ServiceDebugBehavior)] as ServiceDebugBehavior;
2 debugBehavior.IncludeExceptionDetailInFaults = true;
3 for (int i = 0; i < srvHost.Description.Behaviors.Count; i++)
4 {
5      if (srvHost.Description.Behaviors[i].ToString() == "System.ServiceModel.Description.ServiceDebugBehavior")
6          {
7               srvHost.Description.Behaviors[i] = debugBehavior;
8             }
9   }

哈哈,再调试,果然服务端的异常信息抛出来了,由于服务端找不到我程序的某个文件了,wcf不干了,但是为了安全,所以客户端只说是内部错误!异常找到了,结果就是解决咯!大功告成!
【转载注明出处!谢谢】

时间: 2024-11-05 21:49:58

继续Wcf记录点滴的相关文章

记录点滴~

2015.1.14,今天开通了博客园,我会每个月至少写2篇自己原创的技术分享博客, 记录下自己成长的点滴,也和朋友们共进.      

C#lambda表达式记录点滴

基础,你是高手,就请飘走....... 平时做项目写代码很少用lambda表达式,特此补充一下,记录下来. 1 什么是lambda表达式? msdn说法:使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数 乍一看,真的有点不舒服,语文没学好!!!那是机器翻译的,吼吼............. 举个例子呗 lambda表达式   x=>x*x            输入x,输出x*x 如果有这样一个方法:  1 public int getX2(int x){retu

记录点滴,厚积薄发!

在学习开发过程中,每当遇到新的问题时,通常都能在网上搜到解决的方法,但是网上的方法千千万,有些是已经过时了的,有些是跟自己开发环境不同的,总是不能第一时间能找到答案. 而当时遇到的问题可能在今后的开发中用到的很少,过不了多久就会遗忘,当再次用到时,又需要大费周章的去寻找正确的解决方法,如此一来将浪费不少的时间,所以还是自己将遇到的问题记录下来,即方便自己查找,也可能会帮助到有需要的人. 原文地址:https://www.cnblogs.com/HardCarroll/p/9982511.html

c++下lrc歌词文件检索(自己写的检索歌词文件,记录点滴)

贴上一个文档,是写这个程序的基本的思路,当然具体的程序和这个有一些出入,但是大体上一样.求批评指正. /*目标:在一个文件夹下吧所有的lrc歌词文件用程序导入,进行分析,最后的结果用TXT表示出来.*/ /*分析:只要建立了倒排索引就可以很容易把歌词的索引文件输入到il.txt中,所以应当有一个函数实现输入倒排索引,而后建立文件输出txt: 0.bool Lyricsindex_out(Lyric_index_list index_list[],int m ){} //相关的有: struct

记录点滴之优化应用性能:Activity里面不要使用静态常量

我们在开发过程中,有时候Activity里面需要用到静态常量,作为初级开发者,我们经常会直接将静态常量定义在Activity里面,这样就会导致在Activity是不能够完全进行销毁的,也就说Activity依旧是占用一个线程的,除非强制杀死该线程,为了提高应用的性能,我们在开发的时候会专门建立一个类来保存这些静态常量,这样再使用的时候,我们只需要直接调用,这样在Activity退出的时候,该线程也将会撤销掉,从而提高应用的性能.

hcnp学习记录点滴-vrp基础

有一道hcie题目,管理员登录到路由器后,命令不能使用,原因可能是权限级别的原因. [Huawei]user-interface vty 0 4 [Huawei-ui-vty0-4]user privilege level 2 [Huawei-ui-vty0-4]authentication-mode password [Huawei-ui-vty0-4]set authentication password cipher gaga 其他几个命令 [Huawei-ui-vty1-4]idle-t

hcnp学习记录点滴-ftp实施

步骤: 1.网络连通测试(设置ip地址) interface GigabitEthernet0/0/0 ip address 10.0.0.1 255.255.255.0 2.开启ftp服务(服务器) [Huawei]ftp server enable 验证: [Huawei]dis ftp-server FTP server is running Max user number                 5 User count                      1 Timeou

hcnp学习记录点滴-ip报头

主要字段:  源地址 目的地   (可选项,从产生基本就没有用到过) DS 复位类型 ID Flags  一共三位不分片(比如http,不允许分片).分片.更多分片 Mtu 1500  = 20字节的ip报头+8字节的icmp +1472的数据 TTL  是ip中的防环机制,IP报文每经过一个网段(安德老师说这样更严谨),TTL减1,如果为0,则丢弃

hcnp学习记录点滴-ip地址分类()

1.分类 A.0.0.0.0--127.255.255.255 B.128.0.0.0--191.255.255.255 C.192.0.0.0--223.255.255.255 D.224.0.0.0--239.255.255.255 组播地址 E.240.0.0.0--255.255.255.255保留 2.私有地址 10.0.0.0--10.255.255.255 172.16.0.0--172.31.255.255 192.168.0.0--192.168.255.255 3.ipv4特