扩展原因

有一WebService,在工程中添加Web Service引用后调用不成功,但是用SoapUI测试正常

分析

用tctTrace跟踪报文后发现wcf生成的报文命名空间与SoapUI的不一样

解决办法

扩展WCF Message,具体如下:

第一步、自定义Message:

 public class MyCustomMessage : Message{private readonly Message message;public MyCustomMessage(Message message){this.message = message;}public override MessageHeaders Headers{get { return this.message.Headers; }}public override MessageProperties Properties{get { return this.message.Properties; }}public override MessageVersion Version{get { return this.message.Version; }}protected override void OnWriteStartBody(XmlDictionaryWriter writer){writer.WriteStartElement("soapenv", "Body", null);}protected override void OnWriteBodyContents(XmlDictionaryWriter writer){this.message.WriteBodyContents(writer);}protected override void OnWriteStartEnvelope(XmlDictionaryWriter writer){writer.WriteStartElement("soapenv", "Envelope", @"http://schemas.xmlsoap.org/soap/envelope/");writer.WriteAttributeString("xmlns", "ws", null, @"此处为自定义的命名空间");}}

第二步、自定义IClientMessageFormatter,在其中应用MyCustomMessage类

    public class MyCustomMessageFormatter : IClientMessageFormatter{IClientMessageFormatter formatter;public MyCustomMessageFormatter(IClientMessageFormatter formatter){this.formatter = formatter;}public object DeserializeReply(Message message, object[] parameters){return this.formatter.DeserializeReply(message, parameters);}public Message SerializeRequest(MessageVersion messageVersion, object[] parameters){var message = this.formatter.SerializeRequest(messageVersion, parameters);return new MyCustomMessage(message);}}

第三步:实现IOperationBehavior

[AttributeUsage(AttributeTargets.Method)]public class MobilityProviderFormatMessageAttribute : Attribute, IOperationBehavior{public void AddBindingParameters(OperationDescription operationDescription, BindingParameterCollection bindingParameters) { }public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation) {var serializerBehavior = operationDescription.Behaviors.Find<DataContractSerializerOperationBehavior>();if (clientOperation.Formatter == null){((IOperationBehavior)serializerBehavior).ApplyClientBehavior(operationDescription, clientOperation);}IClientMessageFormatter innerDispatchFormatter = clientOperation.Formatter;clientOperation.Formatter = new MyCustomMessageFormatter(innerDispatchFormatter);}public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation){}public void Validate(OperationDescription operationDescription) { }}

第四步:应用自定义Behaivor

    static void Main(string[] args){WMS.ERPWSService2Client client = new WMS.ERPWSService2Client();foreach (var operation in client.ChannelFactory.Endpoint.Contract.Operations){operation.Behaviors.Add(new MobilityProviderFormatMessageAttribute());}                }

参考资料:http://msdn.microsoft.com/en-us/magazine/cc163302.aspx

转载于:https://www.cnblogs.com/season2009/p/3960237.html

WCF 扩展一:格式化Web服务请求XML相关推荐

  1. Web服务请求异步化介绍(概念篇)

    前话 在前面的文章中,先给出了Web服务请求异步处理的压力测试报告,从数据角度描述了支持Web请求异步化的容器在不同并发用户下的处理能力及性能消耗.本文从概念的角度对于应用系统异步化,Web服务请求异 ...

  2. 服务器未启动性能计数器,监视 Web 服务请求性能计数器

    监视 Web 服务请求性能计数器 08/30/2016 本文内容 Microsoft BitLocker 管理和监视(MBAM)提供的性能计数器记录发送到以下 web 服务的请求的性能: Status ...

  3. 学习笔记---Web服务、Remoting、WCF (上) --- Web服务

    自从程序设计诞生起, 如何最大限度的重用代码, 减小编码的重复劳动就是程序员永恒不变的课题. 我们从学习面向对象开始, 先后引入了很多种共享代码的手段, 随着学习的不断深入就越发觉得程序设计的发展过程 ...

  4. 《Webservice的应用与开发》学习笔记 ·001【Web服务、XML文档】

    注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 一.Web服务 1.特点 2.定义 二.XML文档 ...

  5. java怎么返回xml_java – 如何从Web服务返回XML

    这可能是疯狂/愚蠢/愚蠢/冗长的问题之一,因为我是网络服务的新手. 我想写一个Web服务,它将以 XML格式返回答案(我正在使用我的服务进行YUI自动完成).我正在使用 Eclipse和Axis2并遵 ...

  6. lvs服务器需要开启web服务么_如何检测 Web 服务请求丢失问题

    导读 『StabilityGuide』是阿里多位阿里技术工程师共同发起的稳定性领域的知识库开源项目,涵盖性能压测.故障演练.JVM.应用容器.服务框架.流量调度.监控.诊断等多个技术领域,以更结构化的 ...

  7. 根据DNS的A记录负载均衡web服务请求

    做为论坛站点:有两种类型的数据要处理: 1 2  1.结构化的数据:  如:用户名.用户发表的评论等,这些可以存储在关系型数据库中:  2.非结构化的数据:如:用户上传的附件.则存储到文件系统中. 论 ...

  8. 构建 RESTful Web 服务

    from: https://www.ibm.com/developerworks/cn/education/java/j-rest/j-rest.html 开始之前 关于本教程 REST 是一种思维方 ...

  9. 使用 ServiceStack 构建跨平台 Web 服务(转)

    出处:http://www.cnblogs.com/shanyou/p/3348347.html 本文主要来自MSDN杂志<Building Cross-Platform Web Service ...

最新文章

  1. redis 双写一致性 看一篇成高手系列1
  2. 小功能 - 收藏集 - 掘金
  3. GIS实用小技巧(一)-如何将RTK测量数据导入CAD中?
  4. linux文件目录与管理
  5. vue 按钮根据状态切换_一个vue实现的标尺插件 - vue-sketch-ruler
  6. log4net进阶手札(四):保存自定义对象到oracle
  7. C语言基础专题 - 通过案例历学 - 结构体
  8. php手机i选择图片多选,ios 相册图片多选 带预览功能
  9. JAVA手机软件JAR和JAD文件内部文件详解
  10. 袖珍计算机英语手册,英语袖珍迷你系列-中考英语速记手册.pdf
  11. 本科毕业设计论文答辩ppt模板
  12. aso优化应用市场推广方案怎么写
  13. 剖析虚幻渲染体系(15)- XR专题
  14. android 拍照 对焦,在Android中设置相机对焦区域
  15. dell服务器主板型号怎么看,我不懂硬件,帮我看看DELL600M的主板是什么型号
  16. learning and enjoying
  17. 一个app的流程分析
  18. CSS反爬获取伪元素的值
  19. 【调剂】2020年西安建筑科技大学考研调剂信息(含接收专业)
  20. uhs3内存卡有哪些_UHS-3标准加身 东芝新款Exceria Pro存储卡性能堪比SSD

热门文章

  1. html如何实现千分位显示,javascript – 如何将千位分隔符添加到我的html表单中
  2. 动态规划时间规整简介入门
  3. 大一新生计算机考试理论知识,大一新生计算机考试.doc
  4. ai写作软件免费-ai写作助手
  5. 硬盘磁头和计算机磁头的区别,固态硬盘不用磁头,不懂操作就out了!
  6. ajax中的换行符,jquery ajax在GET中删除换行符
  7. 可爱的python图片_《可爱的Python》读书笔记(六)
  8. python打印99乘法表的3种方式
  9. python单链表逆序_python链表倒序
  10. goland 插件管理_GoLand 使用SVN