执行如下 批处理:
"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. 大数据量传输时配置WCF的注意事项

    原文:大数据量传输时配置WCF的注意事项 WCF传输数据量的能力受到许多因素的制约,如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题,应注意以下配置: 1.MaxReceivedMe ...

  2. 【转载】大数据量传输时配置WCF的注意事项

    WCF传输数据量的能力受到许多因素的制约,如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题,应注意以下配置: 1.MaxReceivedMessageSize:获取或设置配置了此绑定 ...

  3. Siverlight网页应用程序中WCF通信注意事项

    最近刚刚接触WCF通信,功能就是客户端点击按钮后,服务器端返回一个随机数字.在VS2010中调试的时候,通信都正常,但发布到IIS7中就没反应了,经过几天的摸索,发现WCF的配置要注意以下两点: 1. ...

  4. IIS 部署WCF服务注意事项

    IIS部署WCF服务的时候经常会出现如下错误: System.ServiceModel.EndpointNotFoundException”类型的未经处理的异常在 WinformWcfHost.exe ...

  5. Ajax跨域访问wcf服务中所遇到的问题总结。

    工具说明:vs2012,sql server 2008R2 1.首先,通过vs2012建立一个wcf服务项目,建立好之后.再新开一个vs2012 建立web项目,通过jQuery的ajax方法访问服务 ...

  6. WCF使用net.tcp绑定时的注意事项

    IIS Express没有net.tcp绑定功能,本地测试的话只能使用本机的IIS进行承载,并且需要相应的配置(参见上一篇文章). 算了,直接举一个配置例子吧,懒得写了... <system.s ...

  7. WCF的几个注意事项

    wcf托管服务注意的问题 加上项目分为客户端-WCF服务-逻辑层-数据库三层wcf一直出现异常,说没有初始化啊之类的,如果你的逻辑代码确定没有问题的话,思考是不是wcf的配置文件(app.config ...

  8. 关于WCF的一些注意事项

    1.服务代理,建立通道的方法,要注意及时关掉代理,因为服务设置有一个服务的最大连接数,超过这个连接数,则后面的连接将会等待,一直到超时,报错!! 2.在已有配置的基础上,利用代码更改终结点,如果重设了 ...

  9. WCF实现事件通知相关应用技巧介绍

    WCF实现事件通知是一个比较容易掌握的知识点,不过在实现的过程中,我们还是需要注意一些事项,以保证功能的完善性. WCF中有一些方法的应用对于初学者来说还是比较容易应用.只要熟练的联系这些方法操作,一 ...

随机推荐

  1. postmortem report of period M2

    一.设想和目标 1.我们的软件主要要解决学长设计的学霸系统中视频及文档的浏览功能问题. 2.时间相对充裕.不过对于我们这些零基础的人来说还是比较困难. 3.我们团队中不同意见通常会进行进一步讨论,说出 ...

  2. Java中终止正在运行线程

    问题:java 中如何让一个正在运行的线程终止掉? Demo_1: class TT implements Runnable { private boolean flag = true; @Overr ...

  3. TCP系列30—窗口管理&流控—4、Cork算法

    一.Cork算法概述 Cork算法与Nagle算法类似,也有人把Cork算法称呼为super-Nagle.Nagle算法提出的背景是网络因为大量小包小包而导致利用率低下产生网络拥塞,网络发生拥塞的时候 ...

  4. TCP系列13—重传—3、协议中RTO计算和RTO定时器维护

    从上一篇示例中我们可以看到在TCP中有一个重要的过程就是决定何时进行超时重传,也就是RTO的计算更新.由于网络状况可能会受到路由变化.网络负载等因素的影响,因此RTO也必须跟随网络状况动态更新.如果T ...

  5. SVM之核函数

    SVM之问题形式化 SVM之对偶问题 >>>SVM之核函数 SVM之解决线性不可分 写在SVM之前——凸优化与对偶问题 上一篇SVM之对偶问题中讨论到,SVM最终形式化为以下优化问题 ...

  6. adb shell input keyevent值所对应的字符

    转自:http://blog.csdn.net/chen825919148/article/details/18732041 0 -->  "KEYCODE_UNKNOWN" ...

  7. TreeView的使用

    用于显示多级层次关系 每一项是一个节点,也就是一个Node,是一个TreeNode节点,Nodes是该控件节点的集合. selectedNode用户选中的节点,如果没有选中则为null 1. 当选中后 ...

  8. cacti 添加redis监控(远程服务器)

    监控主机 192.168.24.69 ,以下用A表示 被监控主机 192.168.24.79,以下用B标识   记得在A服务器的cacti中导入监控mysql的templates文件 拷贝ss_get ...

  9. checkBox1_CheckedChanged(object sender, EventArgs e)和checkBox1_CheckStateChanged(object sender, EventArgs e)不同

    using System; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms ...

  10. [STL] 如何将一个vector赋给另一个vector

    vector 有个函数assign, 可以帮助执行赋值操作. assign会清空你的容器. assign函数: 函数原型: void assign(const_iterator first,const ...