使用 WCF Web 服务时获取 System.ServiceModel.ProtocolException

Posted

技术标签:

【中文标题】使用 WCF Web 服务时获取 System.ServiceModel.ProtocolException【英文标题】:Getting System.ServiceModel.ProtocolException while Consuming WCF Webservice 【发布时间】:2013-09-22 21:16:13 【问题描述】:

我正在使用一个 WCF Web 服务,我在 Web 服务端无法控制它。

我提供了一个自动生成的 svc.cs 代理文件,我正在使用它。

其实我是在请求网络服务从客户端下载一些大数据。

有时我会得到

System.ServiceModel.ProtocolException

在我的客户端。

异常如下:

System.ServiceModel.ProtocolException:可用字节数 与 HTTP Content-Length 标头不一致。可能有 是网络错误或客户端可能发送无效请求。

服务器堆栈跟踪:在 System.ServiceModel.Channels.HttpInput.ReadBufferedMessage(流 输入流)在 System.ServiceModel.Channels.HttpInput.ParseIncomingMessage(异常& requestException) 在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(时间跨度 超时)在 System.ServiceModel.Channels.RequestChannel.Request(消息消息, TimeSpan 超时)在 System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息 消息,TimeSpan 超时)在 System.ServiceModel.Channels.ServiceChannel.Call(字符串动作, Boolean oneway, ProxyOperationRuntime 操作, Object[] ins, Object[] 出局,TimeSpan 超时)在 System.ServiceModel.Channels.ServiceChannel.Call(字符串动作, Boolean oneway, ProxyOperationRuntime 操作, Object[] ins, 对象 [] 出局)在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall,ProxyOperationRuntime 操作)在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage 留言)

在 [0] 处重新抛出异常:在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(消息数据& msgData,Int32 类型)在 IBulkDataSvc.GetEmployeesData(字符串 BusinessPath、DateTime EffectiveDate、String TerminalName)在 Empower.ServiceRequest.EmployeeDataXML(DateTime 时间,字符串终端) 在 Empower.Empower.DownloadEmployeeList(String terminalName)

我在客户端的 Web 服务绑定配置如下(仅显示绑定),

    <bindings>
      <basicHttpBinding>
        <binding name="BulkDataSvcSoap">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic" />
          </security>
        </binding>
        <binding name="BulkDataSvcHttpsSoap">
          <security mode="Transport">
            <transport clientCredentialType="Basic" />
          </security>
        </binding>
      </basicHttpBinding>
      <netTcpBinding>
        <binding name="BulkDataSvcTcp">
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>

我有点困惑它到底是从哪一端生成的,为什么生成?

我在谷歌上搜索过,但没有发现任何有用的东西。所以有人可以帮我解决这个难题 .

【问题讨论】:

您是否启用了登录 WCF 服务以进行分析。仅此一项就可以更好地了解您现在遇到的问题。分析日志文件可以帮助你。或者为我们发布 svclog 文件中的异常详细信息。 【参考方案1】:

你有机会读到这个calling non wcf service

此外,在某些情况下,如果您的请求带来的数据大于 Web 服务端指定的数据,那么您一定会得到这个。

【讨论】:

以上是关于使用 WCF Web 服务时获取 System.ServiceModel.ProtocolException的主要内容,如果未能解决你的问题,请参考以下文章

无法从本地机器调用 WCF 服务

WCF 服务而不是 ASMX Web 服务?

Web 服务与 WCF 服务

将 WCF 服务添加为 Web 引用和服务引用时的不同代理类

将 WCF 服务添加为 Web 引用和服务引用时的不同代理类

如何获取 WCF Web 服务请求的 XML SOAP 请求?