执行如下 批处理:
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\svcutil.exe" http://127.0.0.1:40001/TestService?wsdl /language:C# /out:"D:\TestProxy.cs" /config:"app.config"
"C:\Program
Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\svcutil.exe"
http://127.0.0.1:40001/TestService?wsdl /language:C#
/out:"D:\TestProxy.cs" /config:"app.config"

就能在 D盘 得到 代理类 & 配置文件片段

——————————————————————————————————————————————————————

关于 WCF的 传统用法 几点忠告:

  >WCF不支持 List 等一切 集合类型 (一切集合 都会被 WCF 转换为 数组)
  >WCF不支持 Hashtable 等大部 哈希类型 (大部哈希 都会被 WCF 转换为 Dictionary<object,object>)
    ——部分特殊情况 WCF 连 Dictionary<object, object> 都不支持
  >注意在 服务端 对 需要的对象 声明特性 : [KnownType(typeof(TestVModel_User))]

  >建议: WCF穿透对象 尽量不要出现 List 和 Hash —— 可以的话 尽量用 T[] 和 Dictionary<K, V>
  >警告: 使用 Hashtable 就是一个 不折不扣 的 埋坑行为。

——————————————————————————————————————————————————————

关于 WCF的 另类用法 几个方案:
  PS: "穿透实体" = "视图实体"
  "数据实体" 指 保存有效数据的 实体对象

  >方案一 : WCF 传统用法 : 写服务端、生成客户端代理类
    >优势 :   代码简单;
         用 穿透实体 保护 数据实体;
    >劣势 :   数据类型 狭隘; 存在 不稳定因素;
         服务端改变, 所有 客户端代理类 需 重新生成 (最难维护 的 环节);

  >方案二 : WCF 穿透对象 只使用 byte[]
    >优势 :  通讯量小,速度快,类型广泛,数据稳定;不需要重新生成 代理类;
    >劣势 :  byte[] 反向解析 问题:
          >如果 是 反序列化 :则 要求客户端 存在 实体类程序集 —— 无法保护 数据实体;

  >方案三 : WCF 穿透对象 只使用 string
    >优势 : 通讯量小,速度快,数据稳定,跨Java等平台,不需要重新生成 代理类;
    >劣势 :  >只能兼容 XML 和 JSON 类型 —— 类型依然狭隘;
        >string 明文, 可能存在 安全问题;
        >需要客户端 反解析 JSON 或 XML 字符串 —— 代码多了一点;

  >方案四 :  >系统内网电脑 WCF 使用 byte[] —— 共享 实体类程序集
       >系统外网电脑 另外开辟 Web服务, 另外开辟 穿透实体;
    >优势 : 在 有安全机制 的 内网, 使用 稳定快速的 方式;
    >劣势 : 在 有风险   的 外网, 使用 另外的暴露 方式;

  最后 : 实体类程序集
    >只包含 视图实体类, 字段属性 —— 结构简单;
    >并不包含 逻辑代码, 被外部引用 —— 真的会有 安全风险 么?

  当然, 任何一种方案, 难度都差不多 —— 更多的都是 后期维护的 难度不同;

——————————————————————————————————————————————————————

关于 WCF的 维护测试:

  >如果 没有标记 [DataMember] :
  >如果 部分标记  [DataContract] 和 [DataMember] —— 则未标记 属性 会丢失(不会出现在 代理类中)
  >如果 不标记任何 [DataContract] 和 [DataMember]
    >且 不标记 [Serializable] —— 完全正常
    >若 标记  [Serializable] —— 所有属性名 都会被加上 __BackingField 后缀

  >如果 增加/减少 穿透对象的属性 :
    >减少 穿透对象 属性, 但是 代理类却没有更新 —— 客户端一切正常, 减少属性 无值
    >增加 穿透对象 属性, 但是 代理类却没有跟新 —— 客户端一切正常, (代理类 ExtensionData 有增加值)

  >如果 增加/减少 服务函数 :
    >如果 增加 服务函数 :
      >如果 新函数 返回 新穿透对象, 但是 代理类却没有更新 —— 客户端 在不掉用新函数时(客户端根本就没有新函数) 一切正常
    >如果 减少 服务函数, 但是 代理类却没有更新 —— 客户端 在不调用删除函数时 一切正常

  >如果 函数参数列表 增加/减少 函数参数 :
    >增加服务函数 末尾参数, 但是 代理类却没有更新 —— 客户端一切正常, 新参数 无值 (我已经被 彻底 雷死了)
    >新增服务参数 乱序参数, 但是 代理类却没有更新 —— 客户端一切正常, 新参数 无值 (我已经被 完全 雷死了)
    >减少服务参数 任意参数, 但是 代理类却没有更新 —— 客户端一切正常, 新参数 无值 (我已经被 无语了)
    >打乱服务参数, 但是 代理类却没有更新 —— 客户端传入参数 异常 :
      >如 :
      >最开始 服务端、客户端 参数表: testArg, testArg2, testArg3
      >服务端 修改为 testArg2, testArg, testArg3 —— 则 服务端 仅有 testArg testArg3 有值
      >服务端 修改为 testArg, testArg3, testArg2 —— 则 服务端 仅有 testArg testArg2 有值

  >结论 : WCF 的 稳定性&维护性 远远超过 我之前的 预期

WCF开发那些需要注意的坑 Z的更多相关文章

  1. 『随笔』WCF开发那些需要注意的坑

    执行如下 批处理:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\svcutil.exe" http://127.0.0.1: ...

  2. WCF开发教程资源收集

    WCF开发教程资源收集 1.蒋金楠,网名Artech的博客 [原创]我的WCF之旅(1):创建一个简单的WCF程序[原创]我的WCF之旅(2):Endpoint Overview[原创]我的WCF之旅 ...

  3. WCF开发时如何选择正确的实例模式(InstanceMode)?

    WCF开发时如何选择正确的实例模式(InstanceMode)?   在使用WCF实例模型时,你是否思考过这几个的问题: ”WCF中的实例模式如何正确应用”? ”使用WCF中的实例模式有何原则可以遵循 ...

  4. 细数Python Flask微信公众号开发中遇到的那些坑

    最近两三个月的时间,断断续续边学边做完成了一个微信公众号页面的开发工作.这是一个快递系统,主要功能有用户管理.寄收件地址管理.用户下单,订单管理,订单查询及一些宣传页面等.本文主要细数下开发过程中遇到 ...

  5. 记一次SpringBoot 开发中所遇到的坑和解决方法

    记一次SpringBoot 开发中所遇到的坑和解决方法 mybatis返回Integer为0,自动转型出现空指针异常 当我们使用Integer去接受数据库中表的数据,如果返回的数据中为0,那么Inte ...

  6. WCF开发实战系列一:创建第一个WCF服务

    WCF开发实战系列一:创建第一个WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 在这个实战中我们将使用DataContract,ServiceContract ...

  7. WCF开发实战系列二:使用IIS发布WCF服务

    WCF开发实战系列二:使用IIS发布WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 上一篇中,我们创建了一个简单的WCF服务,在测试的时候,我们使用VS200 ...

  8. WCF开发实战系列三:自运行WCF服务

    WCF开发实战系列三:自运行WCF服务 (原创:灰灰虫的家 http://hi.baidu.com/grayworm)上一篇文章中我们建立了一个WCF服务站点,为WCF服务库运行提供WEB支持,我们把 ...

  9. WCF开发实战系列四:使用Windows服务发布WCF服务

    WCF开发实战系列四:使用Windows服务发布WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 上一篇文章中我们通过编写的控制台程序或WinForm程序来为本 ...

随机推荐

  1. JavaScript区分click事件和mousedown(mouseup、mousemove)方法

    在前端开发工作中,会遇到这样问题:针对同一个dom元素,即希望为它绑定click事件,又想该元素可以允许拖拽的效果.而使用拖拽的效果,我们一般就会用到mousedown,mousemove和mouse ...

  2. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十二)水情雨情模块

    config.xml文件的配置如下: <widget label="水情" icon="assets/images/water.png" config=& ...

  3. Android RecyclerView.Adapter notifyDataSetChanged 不起作用

    我在自己动手写RecyclerView的上拉加载更多,最后就差一步,这个时候数据已经加载完了,UI上面没有显示,我而且也调用了notifyDataSetChanged刷新item的数据,但是一直没效果 ...

  4. jquery通过class验证表单不能为空

    在开发系统时,往往都有某些表单数据为必填项,若用jQuery通过ID去验证,不仅会影响效率,还会有所遗漏,不易于后期维护. 本章将介绍如何利用jQuery,通过为表单配置class进行统一验证.(ID ...

  5. js,jq新增元素 ,on绑定事件无效

    在jquery1.7之后,建议使用on来绑定事件. $('.upload a').on('click',function(){ $(this).remove(); }) 在DOM渲染的时候,也就是ht ...

  6. WPF 自定义雷达图

    自定义雷达图表如下: Git下载地址:https://github.com/Kybs0/RadarChartControl 1.创建UserControl,名为“RadarChartControl” ...

  7. css工具收集

    收集一些css的生成工具,开发中可以直接拿过来用.特别是那些css3中的一些新的特性. 1  css渐变背景在线生成工具      http://www.colorzilla.com/gradient ...

  8. Ngnix下安装python2.7

    1 mkdir data 创建data目录 2 cd data 切换到data目录下 3 mkdir python27 创建python27目录 4 将下载好的python压缩包放在python27目 ...

  9. 使用Struts框架,实现用户登陆功能

    前言:本篇文章是本人这周学习的一个小结,在自我总结的同时,希望也能够给其他同学带来一点帮助.本文主要知识是参照书本上的知识点以及网上其他博客文章,在上机操练后的所得,具体源码主要来自http://bl ...

  10. JS控制div跳转到指定的位置的解决方案总结

    总结一下自己在写这个需求遇到的问题,相信大家应该是经常遇到的.即要求滚轮滚动到指定的位置.先看下基本的解决方案. 1.给链接a加个#的方式来实现跳转.(锚点方法)这里直接贴下代码: html页面: & ...