前言

在做即时通信项目时,手上另一个项目的颠簸,即时通信项目一直是改改停停的,一些改动比较小,没有即时的签入,然后一段时间本地的项目代码与源代码存在不少区别,在这种情况下,因为新的需求添加,需要给WCF服务添加新的方法,出现了一个浪费我很长时间的问题。

问题

遇到的问题:
服务器未提供有意义的回复;这可能是由协定不匹配、会话过早关闭或内部服务器错误引起的。

这个问题,之前有遇到过,并按照网上的解决办法进行了修改,没想到又出现了,之前的解决办法如下:
可能原因:
1、WCF中不允许在协议中定义一个类型而传输其子类型. 除非在该类型上定义了[KnownType(typeof(子类型))]
2、WCF传输List<object>时序列化问题
WCF传输List集合时,在序列化时是有大小限制的,默认的可序列化的集合长度是65536,如果List的大小超出这个值就需要更改了配置了,在服务器端的behavior配置中增加一行配置:

<behavior name="WCFService.Behavior">
<serviceMetadata/>
<serviceDebug includeExceptionDetailInFaults="false" />
<dataContractSerializer maxItemsInObjectGraph=""/>
</behavior>

并且在对应的binding配置中添加readerQuotas节点配置:

    <binding name="BasicWsHttpBinding">
<reliableSession enabled="true" />
<security mode="None">
<transport clientCredentialType="None" />
<message clientCredentialType="None" />
</security>
<readerQuotas maxDepth="" maxStringContentLength="" maxArrayLength="" maxBytesPerRead="" maxNameTableCharCount="" />
</binding>

解决方法

再次遇到这个问题,心里一阵恐慌,会话过早关闭与内部服务器错误是不可能的,只能是协定不匹配导致,但是我反复排查确认,协定也是正确的,花费大量时间后,依然没有解决此问题,到最后没办法,让同事获取源代码的最新版本,然后把我添加的新方法,让他也添加一遍,清理解决方案后,重新生成,运行后正常启动。这就无奈了,想前想后,只能把问题归咎于没有及时签入代码上了,可能版本上会存在一些问题。

经验教训

项目中的代码要及时签入,改动某些地方后,重新运行程序测试没问题,就签入好了。反正有变更集,出问题还可以在还原。另外,遇到一些棘手问题,如果实在没有思路,不妨把代码还原一下,然后把更改的内容在重新添加一遍,或许问题就解决了。

WCF:一个棘手的问题的更多相关文章

  1. [Linux]当一个棘手问题需要即可定位,如何协助开发,缩小定位范围

    写在前面:前段时间,朋友给我说了一个她亲身经历的某知名企业面试故事,面试结束感觉自己已脱了一层皮...面试官的问题并不刁钻,但是却是步步紧逼,而且有点类似拜占庭将军问题,只是拜占庭将军问题是所有的假设 ...

  2. 1 WCF 一个基础理论 以及如何实现一个简单wcf服务

    1 SOA : service oriented architecture 面向服务的架构 2 web service标准 3 概念理解图 4 WCF类库 项目的 wcf简单实现 首先创建一个简单的w ...

  3. 关于wcf,webservice,webapi或者其他服务或者接口有什么区别 WCF、WebAPI、WebService之间的区别 【转载】HTTP和SOAP完全就是两个不同的协议 WebService学习总结(一)——WebService的相关概念

    wcf,webservice采用的是rpc协议,这个协议很复杂,所以每次要传递.要校验的内容也很复杂,别看我们用的很简单,但实际是frame帮我们做掉了rpc生成.解析的事情webapi遵循是rest ...

  4. WCF的用户名+密码认证方式(转)

    概述 今天在做Master Data Service(后面简称MDS)项目时需要通过WCF来使用MDS的API,从而对MDS的数据进行操作.在这个过程中,遇到了一个棘手的问题,就是在客户端调用Web ...

  5. WCF初识

    WCF能干什么? 在win32中,应用程序是运行在进程的线程中的,.NET出现之后,出现了AppDomain,其实就相当于在进程和线程之间又又了一层包装层,类似于子进程的概念,在一个进程或者应用程序域 ...

  6. C#实现一个最简单的HTTP服务器

    简介 本文用C#实现了一个最简单的HTTP服务器类,你可以将它嵌入到自己的项目中,或者也可以阅读代码来学习关于HTTP协议的知识. 背景 高性能的WEB应用一般都架设在强大的WEB服务器上,例如IIS ...

  7. WCF入门介绍

    内容介绍 1.WCF是什么? 2.WCF能干什么? 3.WCF与以往的分布式技术有何区别? 一.WCF是什么?     比较贴近官方的说法是:WCF(原代号为Indigo)是一个用于创建和运行分布式系 ...

  8. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  9. WCF理论 【转载】

    原文地址:http://blog.itpub.net/23109131/viewspace-661613/ WCF是什么? WCF是"Windows Communication Founda ...

随机推荐

  1. IT题库2-LinkList和ArrayList(插入数据、末尾插入数据、不同数据量插入数据)的效率?

    ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references).ArrayList是List接口的一个实现类,它的特点是查询效率高,增删效率低,线程不安全,原因 ...

  2. [20180603]Python读写csv

    原文:https://docs.python.org/3/library/csv.html 进入python官网后,选择document,然后选择library reference. 读取: impo ...

  3. redis 在 php 中的应用(key篇)

    本文为我阅读了 redis参考手册 之后结合 博友的博客 编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: KEY(键) DEL           ...

  4. 取代iframe,实现页面中引入别的页面

    <li> <a href="#addChannel">添加通道</a> </li> window.onload = rightCha ...

  5. THINKPHP and or 模板语句书写

    select * from xx where (a = 22 or b = 333) or (c=11 and d=22) $where_1['a'] = array('eq', '222'); $w ...

  6. JS对象格式化方法:pretty_format

    /* * 格式化 * */ var pretty_format = function (obj, indent) { if (obj === null) return 'null'; if (obj ...

  7. ltp-ddt nor qspi spi调试中需要修改的地方

    1 blk_device_dd_readwrite_test.sh before SRC_FILE="/home/root/srctest_file_${DEVICE_TYPE}_$$&qu ...

  8. ltp-ddt git

    ltp-ddt目录下有一个文件夹 confrVOaeL confvp5WrA 这个文件夹是由./configure --host=arm-linux-gnueabihf命令生成的. 每次configu ...

  9. Gatling实战(二)

    在上一篇实战讲解了Gatling的用例,不过还没涉及到性能方面的内容,其实用例中的最后一句就和性能有关了 setUp(scn.inject(atOnceUsers(1)).protocols(http ...

  10. Task: Indoor Positioning with WiFi Signals

    Task: Indoor Positioning with WiFi SignalsYou are hired by a company to design an indoor localizatio ...