前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WCF 入门 (16)

WCF 入门 (16)

作者头像
_淡定_
发布2018-08-24 10:55:04
2760
发布2018-08-24 10:55:04
举报
文章被收录于专栏:dotnet & javadotnet & java

前言

上周回母校见了一下大学老师,还有些同学,发现差距还是挺大的。。。圈子不一样,真的就什么都不一样了。。

第16集 WCF中的Soap错误 Soap faults in WCF

首先简单介绍一下什么是Soap。

Soap全称Simple Object Access Protocol, 简单对象访问协议,他是一种交换数据的协议规范,是一种轻量的、简单的、基于xml的协议,它被设计成在WEB上交换结构化的和固化的信息。

因为异常是不允许通过WCf的service channel 发送给客户端的,所以,服务端把Exception序列化为Soap格式的信息,然后发送给客户端。

关于Service channel, 查了一下,大概是这么个定义。有句话是这么说的:

The main goal of Channel is to transform message to format understandable by the communication wire and compatible to both server and client and then transport the message over the wire in between client and server.

XML格式的Soap faults 和平台无关,一个典型的SOAP错误信息包含以下几个方面。

  1. FaultCode
  2. FaultReason
  3. Detail elements 等。

以后的视频会着重讲一下这个Detail elements。

SOAP faults基于两种格式,SOAP 1.1 和SOAP 1.2, 两者的文档在这里,可以看看。在WCF中,如果bingding是BasicHttpBinding,就用1.1, 其他的WCF内置bingding用1.2.

我们先根据第九集的内容启用WCF的日志记录功能,然后在客户端调用服务,会生成一个svclog文件,双击打开,选择item,就可以看到具体的log message。

QQ截图20151026232849
QQ截图20151026232849

打开之后出了点小插曲,报了下面的错误:

The trace record is not correct and cannot be loaded. This might be caused by one of the following reasons:

record不能被加载,看了一下内容,xml格式不完整,顺手谷歌了一下,(先试验bing,没找出来,然后百度试了一下,也不行)不的不说,谷歌真的nb。

解决方案是在<system.diagnostics>的节点下加上一个<trace autoflush=”true”/>,如下图:

QQ截图20151026233618
QQ截图20151026233618

打开之后可以看最后一个,是个response, 倒数第二个是request。

QQ截图20151026234116
QQ截图20151026234116

由图可以看到faultcode,faultstring(因为我们用的basicHttpBinding,所以是soap1.1,所以是faultstring,如果是其他bingding,就是faultreason),detail都有了(如果没有启用includeExceptionDetailInFaults=true,那么就看不到detail)。

然后来试验一下其他bingding,比如wsHttpBinding(这个以后会着重讲)。

首先是服务端的修改:把basicHttpBinding改成wsHttpBingding

QQ截图20151027001246
QQ截图20151027001246

还要设置bingding的security mode = none, 因为对于wsHttpBingding,这个默认是打开的,简而言之,非明文传输的。

QQ截图20151027001917
QQ截图20151027001917

然后rerun这个host

更新客户端的服务引用

QQ截图20151027002053
QQ截图20151027002053

结束之后会发现,客户端的配置文件里面的binding也变成了wsHttpBinding

QQ截图20151027002227
QQ截图20151027002227

再次调用,然后打开svclog,看到如下结果:

QQ截图20151027002422
QQ截图20151027002422

这样,就什么都有了。

这集介绍了fault message在soap1.1 和1.2 下的不同表现。

Thank you!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-10-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 第16集 WCF中的Soap错误 Soap faults in WCF
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档