接收對 http://192.168.1.18:8001/ObtainData/Service 的 HTTP 響應時發生錯誤。這可能是由於服務終結點綁定未使用 HTTP 協議造成的。這還可能是由於服務器中止了 HTTP 請求上下文(可能由於服務關閉)所致。



[2015/8/5 19:28:49]
錯誤信息:接收對 http://192.168.1.18:8001/ObtainData/Service 的 HTTP 響應時發生錯誤。這可能是由於服務終結點綁定未使用 HTTP 協議造成的。這還可能是由於服務器中止了 HTTP 請求上下文(可能由於服務關閉)所致。有關詳細信息,請參見服務器日志。
異常類型:System.ServiceModel.CommunicationException
程序集:mscorlib
方法:Void HandleReturnMessage(System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Messaging.IMessage)
跟蹤棧信息:

Server stack trace:
在 System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)
在 System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
在 System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
在 System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
在 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(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)
在 ZBMServiceContract.IObtainData.SelectProjectByUserName(String userName)
在 Client.ObtainDataClient.SelectProjectByUserName(String userName) 位置 d:\Colleague\BaiYongsheng\Server\Client\ObtainDataClient.cs:行號 41
在 Client.Program.ObtainData() 位置 d:\Colleague\BaiYongsheng\Server\Client\Program.cs:行號 61
在 Client.Program.Main(String[] args) 位置 d:\Colleague\BaiYongsheng\Server\Client\Program.cs:行號 27


[2015/8/5 19:28:49]
錯誤信息:基礎連接已經關閉: 接收時發生錯誤。
異常類型:System.Net.WebException
程序集:System
方法:System.Net.WebResponse GetResponse()
跟蹤棧信息:
在 System.Net.HttpWebRequest.GetResponse()
在 System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)


[2015/8/5 19:28:49]
錯誤信息:無法從傳輸連接中讀取數據: 遠程主機強迫關閉了一個現有的連接。。
異常類型:System.IO.IOException
程序集:System
方法:Int32 Read(Byte[], Int32, Int32)
跟蹤棧信息:
在 System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
在 System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
在 System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)


[2015/8/5 19:28:49]
錯誤信息:遠程主機強迫關閉了一個現有的連接。
異常類型:System.Net.Sockets.SocketException
程序集:System
方法:Int32 Receive(Byte[], Int32, Int32, System.Net.Sockets.SocketFlags)
跟蹤棧信息:
在 System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
在 System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)

 

 

這個錯誤,排查了好久。

http://www.cnblogs.com/chucklu/p/4708177.html     Service Trace Viewer Tool (SvcTraceViewer.exe)

最后發現是DataTable沒有TableName導致的

無法序列化 DataTable。未設置 DataTable 名稱。

 public DataTable SelectProjectByUserName(string userName)
        {
            Console.WriteLine("客戶端開始調用SelectProjectByUserName");
            DataTable dataTable = new DataTable();
            dataTable.TableName = "dataTable";
            try
            {
                dataTable = DAOManager.Instance.SelectProjectByUserName(userName);
            }
            catch (Exception ex)
            {
                ExceptionLog.Instance.WriteLog(ex, LogType.UI);
            } 
            Console.WriteLine("客戶端結束調用SelectProjectByUserName");
            return dataTable;
        }

這段代碼把我坑了。

DAOManager.Instance.SelectProjectByUserName返回了一個全新的dataTable

導致之前的賦值完全白費力的。

 

代碼修改如下,始終確保DataTable有名字

  public DataTable SelectProjectByUserName(string userName)
        {
            DataTable dataTable = null;
            try
            {
                dataTable = DAOManager.Instance.SelectProjectByUserName(userName);
            }
            catch (Exception ex)
            {
                ExceptionLog.Instance.WriteLog(ex, LogType.UI);
                dataTable = new DataTable();
            }
            dataTable.TableName = "DataTable";
            return dataTable;
        }

 

這里希望函數返回值始終不為null。

有點多余了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM