HTTP 响应时发生错误.这可能是由于服务终结点

.Net技术 码拜 10年前 (2014-12-02) 7141次浏览 0个评论

WPF?WCFWPF?WCF错误WPF应用程序调用WCF是出现这个了,这怎么解决?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 [0]:    在 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`1.OnAsyncCallCompleted(IAsyncResult result)
—-
10分 ystem.Net.WebException: 基础连接已经关闭: 接收时发生错误。 –
System.IO.IOException: 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。 –
System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接。这类的错误,基本就是网络不通,请确保WPF程序所在机器能够在80端口访问到web service.
—-
引用 2 楼 findcaiyzh 的回复:ystem.Net.WebException: 基础连接已经关闭: 接收时发生错误。 –
System.IO.IOException: 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。 –
System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接。这类的错误,基本就是网络不通,请确保WPF程序所在机器能够在80端口访问到web service.从浏览器是可以访问到的,但引用后就不行了
—-
10分 序列化问题,我刚刚也遇到 解决了
—-
20分 方法返回的对象,不仅仅要在Class上添加DataContract 还要在属性上添加DataMember
—-
除此外,还可能有什么原因?我也遇到了类似的错误。但是情况不同的是,我有两个方法,其中一个成功执行了,而另一个没有成功。两方法的签名如下:
[OperationContract]
DataTable GetUserMenus(string userCode);
[OperationContract]
ResultInfo GetDataTable(string sqlGuid, Parameter[] parameters);
第一个方法能够成功执行,但是第二个调用时,就发生如题的错误方法返回的对象 ResultInfo
代码如下:
[DataContract]
public class ResultInfo
{
public ResultInfo() { }
public ResultInfo(Boolean isnormal, int errcode, string errmsg) { _IsNormal = isnormal; _ErrCode = errcode; _ErrMsg = errmsg; }        private Boolean _IsNormal; private int _ErrCode; private string _ErrMsg;
[DataMember]
public Boolean IsNormal { get { return _IsNormal; } set { _IsNormal = value; } }
[DataMember]
public int ErrCode { get { return _ErrCode; } set { _ErrCode = value; } }
[DataMember]
public string ErrMsg { get { return _ErrMsg; } set { _ErrMsg = value; } }
[DataMember]
public Object ReturnObj { get; set; }
}不知道各位大侠遇到过没有?
—-
引用 6 楼 arlin_hou 的回复:除此外,还可能有什么原因?
我也遇到了类似的错误。但是情况不同的是,我有两个方法,其中一个成功执行了,而另一个没有成功。
两方法的签名如下:
[OperationContract]
DataTable GetUserMenus(string userCode);[OperationContract]
ResultInfo GetDataTable(string sqlGuid, Parameter[] parameters);第一个方法能够成功执行,但是第二个调用时,就发生如题的错误
方法返回的对象 ResultInfo 代码如下:
[DataContract]
public class ResultInfo
{
public ResultInfo(){}        public ResultInfo(Boolean isnormal, int errcode, string errmsg)
{
_IsNormal = isnormal;
_ErrCode = errcode;
_ErrMsg = errmsg;
}        private Boolean _IsNormal;
private int _ErrCode;
private string _ErrMsg;        [DataMember]
public Boolean IsNormal
{
get { return _IsNormal; }
set { _IsNormal = value; }
}        [DataMember]
public int ErrCode
{
get { return _ErrCode; }
set { _ErrCode = value; }
}        [DataMember]
public string ErrMsg
{
get { return _ErrMsg; }
set { _ErrMsg = value; }
}        [DataMember]
public Object ReturnObj
{
get;
set;
}
}
不知道各位大侠遇到过没有?第二个在你的datacontract上加上序列namespace Diodes.BPMService.BPMInterface
{
/// <summary>
/// AD用户信息
/// </summary>
[Serializable]
[DataContract]
public class ADUserInfo
{
/// <summary>
/// 站点
/// </summary>
[DataMember]
public string SiteCode { get; set; }        /// <summary>
/// 域名
/// </summary>
[DataMember]
public string Domain { get; set; }        /// <summary>
/// 工号
/// </summary>
[DataMember]
public string EmployeeNo { get; set; }        /// <summary>
/// 登录名
/// </summary>
[DataMember]
public string LoginAccount { get; set; }        /// <summary>
/// AD用户名
/// </summary>
[DataMember]
public string ADAccount { get; set; }        /// <summary>
/// 中文名字
/// </summary>
[DataMember]
public string CName { get; set; }        /// <summary>
/// 英文名字
/// </summary>
[DataMember]
public string EName { get; set; }        /// <summary>
/// 座机号码
/// </summary>
[DataMember]
public string Phone { get; set; }        /// <summary>
/// 移动号码
/// </summary>
[DataMember]
public string Mobile { get; set; }        /// <summary>
/// 邮箱地址
/// </summary>
[DataMember]
public string Email { get; set; }        /// <summary>
/// Sid
/// </summary>
[DataMember]
public string Sid { get; set; }
}
}
—-
此问题已解决,是由于 ReturnObj 不能是object的缘故.也是说WCF在回传对象时一般必须指定要回传的对象的类型.不然无法序列化, 因为有的类是无法序列化的.当然也有大神说, 可以使用穷举出所有的类型的办法.不过,这也是明确告知回传对象的类型的做法.还不如直接回传明确的类型来的方便.
—-
如果时运行一段时间后才报这个错误时什么原因呢
—-
我的也是数据类型的原因,不能是object
—-
有可能你的DataTable没有命名:myDataTable.TableName = “TaskList”;


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明HTTP 响应时发生错误.这可能是由于服务终结点
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!