执行如下 批处理:
"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开发那些需要注意的坑的更多相关文章

  1. 『随笔』C# 程序 修改 ConfigurationManager 后,不重启 刷新配置

    基本共识: ConfigurationManager 自带缓存,且不支持 写入. 如果 通过 文本写入方式 修改 配置文件,程序 无法刷新加载 最新配置. PS. Web.config 除外:Web. ...

  2. 『随笔』Socket 链接 必须 上下行 同时使用

    结论: > Socket 理论上 支持 只上行,或者 只下行. > 心跳包 必须是 上下行的 —— 心跳包请求(上行) - 心跳包响应(下行). > 如果 长时间 只有单向链接(只发 ...

  3. 『随笔』.Net 底层 数组[] 的 基本设计探秘 512 子数组

    static void Main(string[] args) { Console.ReadKey(); //初始化数组 不会立即开辟内存字节, 只有实际给数组赋值时 才会开辟内存 // //猜测数组 ...

  4. WCF开发那些需要注意的坑 Z

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

  5. 『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布

    项目原因: 参与过各种 分布式项目,有 Socket,Remoting,WCF,当然还有最常用的可以跨平台的 WebService. 分布式编码的时间浪费: 但是,无一例外的,开发分布式程序的开发遵循 ...

  6. app外包开发注意事项大全『最新』

    随着移动互联网的高速发展,很多互联网创业公司或传统向互联网转型的公司都急需发开一款app软件,多数公司会选择让外包公司来开发.问题来了,App外包市场鱼龙混杂,我们要如何在这里面选择一个靠谱的公司,这 ...

  7. 『开源』Slithice 2013 服务器集群 设计和源码

    相关介绍文章: <『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布> <『集群』001 Slithice 服务器集群 概述> <『集群』002 Sli ...

  8. 『摄影欣赏』16幅 Romantic 风格照片欣赏【组图】

    今天,我们将继续分享人类情感的系列文章.爱是人类最重要的感觉,也可能是各种形式的艺术(电影,音乐,书,画等)最常表达的主题 .这里有40个最美丽的爱的照片,将激励和给你一个全新的视觉角度为这种情绪.我 ...

  9. 『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现

    『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现 1.基本设定和软件版本 主机名 ip 对应角色 mas ...

随机推荐

  1. 问题解决——OpenGL超级宝典 第四章 4.5.2 关于freeglut.lib问题的解决过程

    看<OpenGL超级宝典(第四版)>的4.5.2节时遇到了一系列问题,经过不懈努力终于解决,现将过程记录在下,以便查找追思. 在第4.5.2节之前,自己写的的代码都没有使用作者的gltoo ...

  2. 基础总结篇之一:Activity生命周期

    子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精 ...

  3. 最小的k个数

    // 最小的k个数.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include & ...

  4. 如何在ZBrush中将球体演变为头发

    对于头发的制作,ZBrush®是多样的,前面的教程中也有讲解,可以用球体作为子工具,用不同笔刷进行雕刻:还可以使用Z球转网格的方式.今天小编讲述一种最简单的方法,使用球体演变头发,这样的创作手法更高效 ...

  5. 怎样对ZBrush中的材料进行渲染和着色

    ZBrush可以实时的进行不断的渲染和着色. 对于绘制操作,ZBrush®增加了新的范围尺度,可以让你给基于像素的作品增加深度,材质,光照和复杂精密的渲染特效,真正实现了 2D 与 3D 的结合,模糊 ...

  6. POJ-1979 Red and Black(DFS)

    题目链接:http://poj.org/problem?id=1979 深度优先搜索非递归写法 #include <cstdio> #include <stack> using ...

  7. AC日记——codevs 1086 栈 (卡特兰数)

    题目描述 Description 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). ...

  8. SVN版本回退

    [SVN版本回退] 在Windows里,先打开Log面板,根据想要回退的内容,然后选择revert to this revision或者revert changes from this revisio ...

  9. linux上的常见命令掌握

    http://coolshell.cn/articles/8883.html 这篇文章来源于Quroa的一个问答<What are some time-saving tips that ever ...

  10. LSB最低有效位隐写入门

    LSB也就是最低有效位 (Least Significant Bit) 被替换成传递的信息字节.对原图影响很小. 这题可以算是隐写工具[wbStego]的使用入门练习题吧. 第一步,告诉你工具是支持在 ...