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

针对C#编写的C/S架构程序在使用WebService接口上传大量数据(超过60M)时出现错误的情况,本文介绍了错误产生的原因及解决方案。通过调整IIS中的最大内容长度设置,而非修改客户端或服务器端配置文件,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

  用户在使用我们开发的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,问题解决。
这里写图片描述

<think>好的,用户遇到了无法连接到WebService的问题,具体错误是终结点侦听SOAP操作错误。我需要先分析可能的原因,然后逐步给出解决方案。首先,根据引用[1]和[2],常见的错误原因包括服务地址错误、服务器无法访问、内容过大等。用户提到的是localhost:8075,可能涉及本地服务未启动或端口占用。需要检查服务是否运行,端口是否被正确监听。然后,SOAP操作错误可能涉及配置问题,比如服务端和客户端的SOAP版本一致,或者WSDL未正确生成。需要核对客户端的配置,尤其是服务引用是否更新,地址是否正确。另外,用户提到InnerException,可能需要查看更详细的错误信息。建议用户检查日志或调试获取内部异常,这有助于定位问题。还有可能防火墙或权限问题阻止了访问,虽然本地通常会有,但也能完全排除。需要建议用户检查防火墙设置,或者使用telnet测试端口连通性。最后,如果内容过大导致的问题,如引用[2]提到的60M以上会出错,用户可能需要调整配置,比如增大maxReceivedMessageSize等参数。 总结步骤应该是:验证服务运行、检查端口监听、核对地址SOAP配置、查看内部异常、调整消息大小限制、检查防火墙。需要分步骤详细说明,确保用户能逐步排查。</think>针对无法连接$http://localhost:8075/WebService.asmx$的问题,请按以下步骤排查: ### 一、验证服务基础运行状态 1. **确认WebService已启动** - 检查IIS/ASP.NET服务是否运行,确认应用程序池状态为"Started" - 在浏览器访问$http://localhost:8075/WebService.asmx$,应显示SOAP方法描述页[^2] 2. **检测端口监听** ```powershell netstat -ano | findstr :8075 ``` - 若未显示LISTENING状态,说明服务未正确绑定端口 ### 二、排查网络层问题 1. **本地环路测试** 通过`telnet localhost 8075`测试TCP连接性,正常应显示空白终端 2. **防火墙设置** - 检查Windows Defender防火墙是否开放8075端口 - 临禁用防火墙测试:`netsh advfirewall set allprofiles state off` ### 三、SOAP配置核查 1. **服务地址验证** ```xml <!-- 客户端配置文件示例 --> <endpoint address="http://localhost:8075/WebService.asmx" binding="basicHttpBinding" contract="WebServiceReference.WebServiceSoap"/> ``` - 确保地址与WSDL地址完全一致(注意大小写敏感性) 2. **SOAP版本匹配** - 服务端web.config需配置正确绑定: ```xml <system.serviceModel> <bindings> <basicHttpBinding> <binding maxReceivedMessageSize="104857600"> <!-- 100MB --> <readerQuotas maxStringContentLength="104857600"/> </binding> </basicHttpBinding> </bindings> </system.serviceModel> ``` ### 四、高级问题定位 1. **查看InnerException** 在C#代码中添加异常捕获: ```csharp try { webService.MethodCall(); } catch (SoapException ex) { Console.WriteLine(ex.Detail.InnerXml); } catch (Exception ex) { Console.WriteLine(ex.InnerException?.Message); } ``` 2. **启用WCF追踪** 在web.config添加诊断配置: ```xml <system.diagnostics> <sources> <source name="System.ServiceModel" switchValue="Information"> <listeners> <add name="xml"/> </listeners> </source> </sources> <sharedListeners> <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="C:\logs\WCF_Trace.svclog"/> </sharedListeners> </system.diagnostics> ``` ### 五、特殊场景处理 - **大文件传输问题**:当传输数据超过默认4MB限制,需同步调整以下配置: 1. 服务端绑定配置`maxReceivedMessageSize` 2. 客户端配置同步增大 3. IIS请求筛选限制(`maxAllowedContentLength`)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值