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

错误内容:

System.ServiceModel.CommunicationException: 接收对 https://xx.com/xx.svc的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。
这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。有关详细信息,请参见服务器日志。
---> System.Net.WebException: 基础连接已经关闭: 接收时发生错误。
---> System.IO.IOException: 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。
---> System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接。
在 System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
在 System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
--- 内部异常堆栈跟踪的结尾 ---
在 System.Net.Security._SslStream.EndRead(IAsyncResult asyncResult)
在 System.Net.TlsStream.EndRead(IAsyncResult asyncResult)
在 System.Net.PooledStream.EndRead(IAsyncResult asyncResult)
在 System.Net.Connection.ReadCallback(IAsyncResult asyncResult)
--- 内部异常堆栈跟踪的结尾 ---
在 System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
--- 内部异常堆栈跟踪的结尾 --- Server stack trace:
在 System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
在 System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
在 System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeEndService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown at []:
在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
在 Sinopec.UC.Client.Groups.ChatGroupSev.IChatGroupPersistence.EndGetGroupListByMember(IAsyncResult result)
在 Sinopec.UC.Client.Groups.ChatGroupSev.ChatGroupPersistenceClient.OnEndGetGroupListByMember(IAsyncResult result)
在 System.ServiceModel.ClientBase`.OnAsyncCallCompleted(IAsyncResult result)

解决方法1:

此类型错误发生时,有许多方案。

首先检查您提供适当的 [DataContract] 和 [DataMember] 是否这不提供然后这种类型的错误发生。您必须编写 [DataContract] 以上类,您传递的响应,并写入 [DataMember] 以上类成员,是去客户端响应。

[DataContract]
class Program
{
[DataMember]
public string Exampl{get;set}
}

解决方法2:

详细监听客户端请求过程

如果一些 minvalue 的数据类型是通过,检查响应中。这意味着一些时间数据成员不是初始化,时间它采取它 Minvalue。eg MinValue int 的是 '-2147483648',所以一段时间不能序列化并引发错误。

如果您有跟踪这种类型的错误,然后写下你的服务器端 web.config 中的代码下面的

<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
<listeners>
<add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "D:\Traces.svclog"/>
</listeners>
</source>
</sources>

显示结果:

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

服务端异常,详细消息:

尝试对参数 http://tempuri.org/ 进行序列化时出错: GetModelResult。
InnerException 消息是“数据协定名称为“AboveUser_CD87D9757642C65F2A0EC43C3809842CB7DC067138FCEBB7FD761F5193DFA9B9:
http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies”的类型
“System.Data.Entity.DynamicProxies.AboveUser_CD87D9757642C65F2A0EC43C3809842CB7DC067138FCEBB7FD761F5193DFA9B9”不是所需的类型。
请考虑使用 DataContractResolver(如果你正在使用 DataContractSerializer),或将任何未知类型以静态方式添加到已知类型的列表。
例如,可以使用 KnownTypeAttribute 属性,或者将未知类型添加到传递给序列化程序的已知类型列表。”。有关详细信息,请参见 InnerException。
上一篇:ABAP方法的exporting类型参数,需要在方法实现最开始显式初始化么


下一篇:python练习:假设s是一个字符串,返回s中十进制数字之和。例如,如果s是‘a2b3c’,则返回5。