最近在工作中新加了一个接口,本地调试的时候,直接抛出“接收对 http://xxx.svc 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致"这个异常,

之前写的接口都是没问题的,可以排除配置文件或者语法错误;然后调试代码,发现代码return的时候是可以正常返回数据的,赶紧从网上找资料,在博客园找到之前一个大神遇到的问题集锦,

地址如下:http://www.cnblogs.com/tearer/archive/2012/05/23/2514636.html

以下为原来博客内容

============================================================

一、创建时,WCF Service中HttpContext.Current为null的解决办法

1. 在hosting WCF的web.config中加入:

<system.serviceModel>

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

</system.serviceModel>

2. 在Service的类定义上加上下面Attribute:

[AspNetCompatibilityrequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

二、错误提示:调用方未由服务进行身份验证。

修改WCF服务的web.config文件system.serviceModel下添加配置:

<bindings>

<wsHttpBinding>

<binding name="bindingConfiguration1">

<security mode="None">

<transport clientCredentialType="None"/>

<message clientCredentialType="None"/>

</security>

</binding>

</wsHttpBinding>

</bindings>

</system.serviceModel>

</configuration>

并修改behaviors下的endpoint,添加bindingConfiguration="bindingConfiguration1"

三、已超过传入消息(65536)的最大消息大小配额

解决方案1:调用方的代码里加入:

(client.Endpoint.Binding as WSHttpBinding).MaxReceivedMessageSize = int.MaxValue;

解决方案2:修改客户端调用方的Config配置文件:

<system.serviceModel>

<bindings>

<wsHttpBinding>

<binding maxReceivedMessageSize="65536000"

四、调用时服务端返回400 Bad Request错误

解决方案:修改服务端的Config配置文件,增加maxReceivedMessageSize设置:

<system.serviceModel>

<bindings>

<wsHttpBinding>

<binding name="bindingConfiguration1" maxReceivedMessageSize="2147483647"

五、 无法打开安全通道,因为与远程终结点的安全协商已失败。

这可能是由于用于创建通道的 EndpointAddress 中不存在 EndpointIdentity 或错误指定了 EndpointIdentity。

请确认由 EndpointAddress 指定或暗示的 EndpointIdentity 正确标识了远程终结点。

这个错误通常是服务端相关配置修改了,删除引用,重新添加引用即可

六、接收对 http://xxx.svc 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。有关详细信息,请参阅服务器日志。

1、没有重新生成代理文件

2、这是因为WCF返回值无法序列化造成的

WCF的方法,不能返回Object、ICollection、IList之类的不明确的数据类型,但是IList<string>这样的类型可以返回,如果返回IList<SimpleSoft>这样的自定义类型,需要在接口上增加KnownType,如:

[ServiceContract]

[ServiceKnownType(typeof(SimpleSoft))]

public interface ISearchService

七、格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: 方法名。InnerException 消息是“在行 1、位置 1485 出现错误。 元素“http://schemas.datacontract.org /2004/07/父类”含有“http://schemas.datacontract.org/2004/07/子类”数据协定的数据。反序列化程序 不知道映射到此协定的类型。请将与“子类”对应的类型添加到已知类型的列表中,例如,通过使用 KnownTypeAttribute 属性或通过将其添加到传递给 DataContractSerializer 的已知类型的列表等方法。”。有关详细信息,请参阅 InnerException。

接口返回父类,但是实际返回的是子类,就会出现这个错误,解决方法,在父类定义上添加属性,如:

[KnownType(typeof(FullSoft))]

public class SimpleSoft

八、读取 XML 数据时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。

解决方案:修改客户端的Config配置文件,增加maxStringContentLength设置:

<system.serviceModel>

<bindings><wsHttpBinding><binding name=""....>

<readerQuotas maxStringContentLength="2147483647"

九、无 法激活服务,因为它不支持 ASP.NET 兼容性。已为此应用程序启用了 ASP.NET 兼容性。请在 web.config 中关闭 ASP.NET 兼容性模式或将 AspNetCompatibilityRequirements 属性添加到服务类型且同时将 RequirementsMode 设置为“Allowed”或“Required”。

解决办法:

修改相应   服务.svc.cs

using System.ServiceModel.Activation ;

[AspNetCompatibilityRequirements (RequirementsMode=AspNetCompatibilityRequirementsMode.Required)]

十、WCF接口的参数,如果是枚举值,则必须是已经定义的枚举

比如枚举定义: enum aaa{aa=1, bb=2} 如果参数有aaa类型,传递3就会出错,因为枚举定义里没有3

如果枚举定义加上Flags属性,就可以传递3了(等于是aaa.aa | aaa.bb)

[Flags]

enum aaa{aa=1, bb=2}

十一、作为WCF接口的参数,其成员必须有public的set属性,否则不会传递,比如下面的a参数可以在wcf中使用,下面的b参数无法使用:

public aaa{

public int a{get;set;}

public int b{get;private set;}

}

十二、System.ArgumentException: 此集合已经包含方案 http 的地址。此集合中每个方案中最多只能包含一个地址。

WCF 针对每个schema只支持一个绑定,所以站点不能绑定多个主机头来使用WCF,如果绑定多个主机头,可以在Web.config里配置,但是如下配置后,其它主机头无法使用这个wcf:

<serviceHostingEnvironment>

<baseAddressPrefixFilters>

<add prefix="http://www.cnblogs.com/"/>

</baseAddressPrefixFilters>

</serviceHostingEnvironment>

十三、在wcf项目下,找到web.config 文件修改如下(蓝色部分)

<behaviors>
     <serviceBehaviors>
        <behavior>
          <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
  </behaviors>

================================================================

发现第六条很切题,但是又不够精准

因为数据可以正常返回,就只在输出的时候出错了,所以问题的原因就是:WCF返回值无法序列化造成的

但是,我返回的数据类型都是WCF支持的数据类型,这点就很奇怪了

最后没办法了,在公司群里发了求助,终于有个同事说之前也遇到过同样的问题,就是返回的实体类中有枚举类,但是枚举类如果没赋值,默认是0,反序列化出问题了,

本人就赶紧调试看了下返回值,确实有一个枚举类的字段在查数据的时候没赋值,赋值之后马上OK了!

解决WCF“接收对 http://xxx.svc 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致"的更多相关文章

  1. 这可能是由于服务终结点绑定未使用 HTTP 协议造成的 .这还可能是由于服务器中止了 HTTP 请求上下文

    一个很简单的WCF报这个异常,才发现是 Response的类无法被序列化 因为在Response类里有一个枚举 StatusType,而系统的枚举值是 从0-5,但是数据库里多了一个值为6的记录 这样 ...

  2. 接收对 http://192.168.1.18:8001/ObtainData/Service 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。

    [2015/8/5 19:28:49]错误信息:接收对 http://192.168.1.18:8001/ObtainData/Service 的 HTTP 响应时发生错误.这可能是由于服务终结点绑定 ...

  3. HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。

    第一种:无法序列化 DataTable.未设置 DataTable 名称. 第二种: 排除过程如下: 1.用WCF调试状态下的客户端调用ESB的Publish方法调用成功,证明ESB的推送是没有问题的 ...

  4. WCF 接收我服务的 HTTP 响应时发生错误

    错误内容: System.ServiceModel.CommunicationException: 接收对 https://xx.com/xx.svc的 HTTP 响应时发生错误.这可能是由于服务终结 ...

  5. 问题解决_WCF_WCF 接收我服务的 HTTP 响应时发生错误

    原文地址:http://www.cnblogs.com/tianma3798/p/5470974.html 错误内容: System.ServiceModel.CommunicationExcepti ...

  6. 解决vs创建或打开C++浏览数据库文件*.sdf时发生错误的问题

    VS2012,  创建或打开C++浏览数据库文件*.sdf时发生错误. IntelliSense 和浏览信息将不能用于C++项目. 请确保已安装 Microsoft SQL Server Compac ...

  7. 【Mac】解决macos安装升级时报错安装所选更新时发生错误的问题

    1 系统更新macjave 更新一直失败: 2  解决方法为:重新启动Mac,并按住Command+R进入恢复模式,找到Terminal后输入csrutil disable,然后重启Mac,再次下载并 ...

  8. 记录一次排查使用HttpWebRequest发送请求的发生“基础连接已关闭:接收时发生错误”异常问题的过程

    描述:某次更新程序,需要给测试员MM测试,之前都是正常的,更新后给MM测试就报异常System.Net.WebException 基础连接已经关闭:接收时发生错误 -------> System ...

  9. 【已解决】Https请求——基础连接已经关闭 发送时发生错误

    本人在做商用项目的推送消息功能时,借助第三方推送服务.这里避免有打广告的嫌疑,就不报名字了.由于是通过调用API接口,所以Post方法是自己写的,但是在开发环境是可以正常推送的,但是一上线就出各种问题 ...

随机推荐

  1. vue2.0 + element-ui 通过vue-cli 脚手架搭建的有关网络安全的项目源代码

    这次是我进入公司的练手项目,是第一次系统学习vue,做出来的demo是比较低端的,而且不太好看,见谅见谅. 源代码下载路径:https://github.com/Pandora-ps/vue-elem ...

  2. classLoader和Class.forName的区别

    public class ClassLoaderOrClassForName{ public static void main(String[] args) throws ClassNotFoundE ...

  3. html css+div+jquery实现图片轮播

    一直想自己动手做一个图片轮播的控件,查查网上的资料大多引用已经做好的组件,其原理算法不是很清楚,于是自己用jquery写了一个.先看下效果图: 主要界面实现思路如下: 1.新建一个div宽度为100% ...

  4. java基础——字符串中的反转Reverse问题(面试必备)

    由于研究了关于字符串(String)的问题,今年就在这里总结一下,首先说一下有关于面试,我想的是,需要一定的技能,比方说,大家想到这个反转问题,肯定能说上了,只不过是你说的一般人都知道,要想在面试中更 ...

  5. VmwareTools以及搜狗拼音的安装

    已经那么多年工作下来了,结果装linux还是那么 的费劲! 装的是纯净版Ubuntu16.04版本,17.04怕不稳定就没装, 装了发现VmwareTools是暗的,以前也遇到过这个问题,但是真的忘记 ...

  6. Debug程序的使用

    一.什么是Debug程序: Debug是DOS, Windows(但是Win7 64位没有,8 10不清楚.)都提供的实模式程序的调试工具, 使用它,可以查看CPU各种寄存器中的内容,内存的情况和在机 ...

  7. linux文本编辑器vim大全

    linux基础之vim编辑器 1.vim编辑器 基本介绍 vim编辑器的前身叫做vi.vi的英文名:Visual  Interface.中文解释文本编辑器,你不应该用他去打开二进制可执行文件 文本编辑 ...

  8. anaconda 的安装

    进官网下载anaconda, 根据需要下载对应python版本Anaconda软件. https://www.anaconda.com/download/#windows 下载完双击 Anaconda ...

  9. JQuery----操作01

    ---恢复内容开始--- 一 JQuery选择器: 基本选择器和基本过滤器和筛选选择器 基础选择器: <title>Title</title> <script src=& ...

  10. ewfwefwefe

    qwdefwef fwefwef