我有两个项目。一个有wcf服务和数据库。其他用于调用这些函数。如果我调用webservice的函数,它会向数据库添加一些东西,它可以正常工作。但是当我调用一个从数据库中检索内容的函数时。我得到了CommunicationException。我在WebService.svc.cs中调用的函数是:
public List<Artist> GetAllArtists()
{
Database1Entities db = new Database1Entities();
return (db.Artists).ToList();
}
我称之为
protected void Page_Load(object sender, EventArgs e)
{
ServiceReference2.WebServiceClient o = new ServiceReference2.WebServiceClient();
Artist [] artists = o.GetAllArtists(); //Exception arises here
string str = "";
foreach (Artist artist in artists){
str += artist.ArtistID + " ";
}
Response.Write(str);
gv.DataSource = artists;
gv.DataBind();
}
例外:
System.ServiceModel.CommunicationException未被用户代码处理 HResult = -2146233087 Message =接收HTTP时发生错误 回复http://localhost:23060/WebService.svc。这可能是应该的 不使用HTTP协议的服务端点绑定。这个 也可能是由于HTTP请求上下文被中止 服务器(可能是由于服务关闭)。查看服务器日志 更多细节。 Source = mscorlib StackTrace:服务器堆栈跟踪:at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(引发WebException webException,HttpWebRequest请求,HttpAbortReason abortReason)at System.ServiceModel.Channels.HttpChannelFactory1.HttpRequestChannel.HttpChannelRequest.WaitForReply(时间跨度 超时) 在System.ServiceModel.Channels.RequestChannel.Request(消息消息, TimeSpan超时) 在System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息
消息,TimeSpan超时) 在System.ServiceModel.Channels.ServiceChannel.Call(String action,Boolean oneway,ProxyOperationRuntime operation,Object [] ins, 对象[]输出,TimeSpan超时) 在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(MessageData&amp;
msgData,Int32类型) at WebLab6AlbumManagementSystemClient.ServiceReference2.IWebService.GetAllArtists() 在WebLab6AlbumManagementSystemClient.ServiceReference2.WebServiceClient.GetAllArtists() 在c:\ Users \ Muhammad Rehan \ Documents \ Visual Studio中 2013 \项目\ WebLab6AlbumManagementSystemClient \服务
参考文献\ ServiceReference2 \ Reference.cs:第567行 在WebLab6AlbumManagementSystemClient.ViewAllArtists.Page_Load(对象
发件人,EventArgs e)在c:\ Users \ Muhammad Rehan \ Documents \ Visual
中 工作室
2013 \项目\ WebLab6AlbumManagementSystemClient \ ViewAllArtists.aspx.cs:行 16 在System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) 在System.Web.UI.Control.OnLoad(EventArgs e) 在System.Web.UI.Control.LoadRecursive() 在System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)InnerException:System.Net.WebException 的HResult = -2146233079 Message =基础连接已关闭:接收时发生意外错误。 来源=系统 堆栈跟踪: 在System.Net.HttpWebRequest.GetResponse() at System.ServiceModel.Channels.HttpChannelFactory1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan) timeout)InnerException:System.IO.IOException HResult = -2146232800 消息=无法从传输连接读取数据:现有的 连接被远程主机强行关闭。来源=系统 StackTrace:在System.Net.Sockets.NetworkStream.Read(Byte []缓冲区, System.Net.PooledStream.Read(Byte []的Int32偏移量,Int32大小) 缓冲区,Int32偏移量,Int32大小)at System.Net.Connection.SyncRead(HttpWebRequest请求,布尔值 userRetrievedStream,Boolean probeRead)InnerException: System.Net.Sockets.SocketException HResult = -2147467259 Message = An 远程主机强行关闭现有连接 Source = System ErrorCode = 10054 NativeErrorCode = 10054 StackTrace:at System.Net.Sockets.Socket.Receive(Byte []缓冲区,Int32偏移量,Int32 size,SocketFlags socketFlags)at System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量, Int32 size)InnerException:
答案 0 :(得分:0)
所有WCF错误消息都是如此神秘,以至于始终不知道导致错误本身的原因。 您错误的原因很可能是某些序列化问题。 尝试添加日志记录或编写测试以使用DataContractSerializer序列化您的艺术家数组。
答案 1 :(得分:0)
protected void Page_Load(object sender, EventArgs e)
{
ServiceReference2.WebServiceClient o = new ServiceReference2.WebServiceClient();
Artist [] artists = o.GetAllArtists().ToArray(); //Exception will not //come now
string str = "";
foreach (Artist artist in artists){
str += artist.ArtistID + " ";
}
Response.Write(str);
gv.DataSource = artists;
gv.DataBind();
}
在服务设置中签入集合默认类型被选为阵列或列表。我认为在你的情况下它被设置为List,因为Service返回List,而在这里你将它分配给Array变量。所以尝试添加.ToArray()或将Default更改为Array。