C#调用WebService时报错:“没有终结点在侦听可以接受消息的 XXXX.asmx。这通常是由于不正确的地址或者 SOAP 操作导致的”

问题描述

  用户在使用我们开发的C#编写的C/S架构的程序时报错,错误消息为:
  “没有终结点在侦听可以接受消息的 XXXX.asmx。这通常是由于不正确的地址或者 SOAP 操作导致的。如果存在此情况,请参见 InnerException 以了解详细信息。”
  这种错误的常见原因有:
    1)WebService的服务地址出错,这时候可以把webservice地址复制到浏览器上看是否可以访问;
    2)服务器无法访问,虽然地址是对的,但是客户机没有权限访问服务器地址或者服务器端口,这时可以使用ping或者telnet命令进行测试;
  但是这次碰到的问题不是上述两种原因造成的,该问题是由于用户使用我们的程序进行内容编辑,为了将内容一次性保存到数据库,设计了一个WebService接口将所有内容一次性上传保存。通过测试,当内容较少时可以正常调用WebService接口,但是内容比较多,比如大于60M时就会报开头提到的那个错误。

解决方案

  一开始认为是服务器端和客户端的配置文件中设置的缓存太小了,于是就把服务器端和客户端的BasicHttpBinding中的缓存设置都加大,但是没有用,依然报相同的错误。
  接着又在网上查到另外的配置文件设置方法,在客户端配置文件中增加LargeQuotaBehavior的行为,然后在终结点设置中配置该行为,在服务器端也是类型的设置。设置之后,依然报相同的错误。

<endpointBehaviors>
  <behavior name="LargeQuotaBehavior">
   <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
  </behavior>
</endpointBehaviors>
<endpoint address="http://localhost/myservice/"
          binding="webHttpBinding"
          bindingConfiguration="webHttpBinding1"
          contract="MyNamespace.IMyService"
          bindingNamespace="MyNamespace"
          behaviorConfiguration="LargeQuotaBehavior">

  最后是通过在IIS中设置对WebService进行以下设置解决的问题,而且不需要对程序的客户端和服务器端文件进行改动,设置步骤如下:
  步骤1:打开IIS,鼠标左键点击有问题的WebService,在右边的图标列表中双击“请求筛选”图标;
这里写图片描述
  步骤2:在请求筛选窗口的右侧,点击“编辑功能设置”;
这里写图片描述
  步骤3:在编辑请求筛选设置窗口,将“允许的最大内容长度”中的设置变大,根据需要设置响应的数值,我就是直接在后面加了个0。点击确定按钮,重启该WebService,问题解决。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/gc_2299/article/details/80056058