我有兩個OperationContracts
一個簡單的WCF服務:WCF服務,SQL Azure的DB和的ContentType /綁定錯誤
public IEnumerable<string> GetDrivers()
{
return new List<string>() { "Senna", "Mansell", "Prost" };
}
public IEnumerable<DriverDto> GetRealDrivers()
{
using (var ctx = new F1Entities())
{
var result = from d in ctx.Drivers select new DriverDto { Name = d.Name, Cost = d.Cost, Team = d.Team };
return result;
}
}
的F1Entities
對象是針對Azure的SQL分貝dbContext
。 DriverDto
類有DataContract
屬性,Name
,Team
和Cost
有DataMember
屬性
當本地調試服務,並使用WCF測試客戶端,我從GetDrivers正確的反應。當我調用GetRealDrivers時,雖然我得到一個錯誤。
接收到對
http://localhost:58059/Service1.svc
的HTTP響應時發生錯誤。這可能是由於 服務端點綁定未使用HTTP協議。這也可能是由於HTTP請求上下文被服務器 中止(可能是由於服務關閉)而導致的 。請參閱服務器日誌以獲取更多 的詳細信息。服務器堆棧跟蹤:在 System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(引發WebException 引發WebException,HttpWebRequest的請求,HttpAbortReason abortReason)在 System.ServiceModel.Channels.HttpChannelFactory1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout) at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at IF1Service.GetRealDrivers() at F1ServiceClient.GetRealDrivers() Inner Exception: The underlying connection was closed: An unexpected error occurred on a receive. at System.Net.HttpWebRequest.GetResponse() at System.ServiceModel.Channels.HttpChannelFactory
1.HttpRequestChannel.HttpChannelRequest.WaitForReply(時間跨度 超時)內部異常:無法從傳輸中讀取數據 連接:現有連接被遠程 主機強制關閉。在System.Net.PooledStream.Read(Byte []緩衝區, Int32偏移量,Int32大小)在System.Net.Sockets.NetworkStream.Read(Byte []緩衝區,Int32 偏移量,Int32大小)在 System.Net。 Connection.SyncRead(HttpWebRequest請求,布爾型 userRetrievedStream,布爾probeRead)內部例外:現有的 連接被遠程主機強制關閉在 System.Net.Sockets.Socket.Receive(Byte []緩衝區,Int32偏移量,Int32 大小,的SocketFlags的SocketFlags)在 System.Net.Sockets.NetworkStream.Read(字節[]緩衝液,的Int32偏移, 的Int32大小)
調試我看到它正確地使用上下文並使用DriverDto類型的對象填充結果變量 - 所有這些對象都具有正確的名稱,成本和團隊值。所以它連接到SQL數據庫就好了。
我已經看到很多提出這個錯誤的問題,但花了好幾個小時跟着他們,我覺得我錯過了更明顯的東西。
添加日誌我找到日誌像這樣的異常錯誤:
內容類型application /肥皂+ xml的; charset = utf-8被髮送到期望text/xml的服務 ;字符集= UTF-8。客戶端和服務綁定可能不匹配。
花費更多的時間試圖到達底部的錯誤,導致大腦崩潰。 我的Web.config服務沒有任何綁定屬性,但仍適用於簡單的GetDrivers調用。我在我的網頁配置中丟失了什麼?這是使用Azure Cloud Service的VS2013模板創建的。
你將不得不將它們存儲在存儲器中首先用'ToList()'例如,因爲歷境被序列化之前設置做完了。出於調試目的,您可以將'includeExceptionDetailsInFault = true'添加到服務器web.config。 – Silvermind
Omg,我不敢相信這件事很好,很容易。我一直在追逐綁定錯誤,然後是內容類型錯誤,整天都變成了ToList()。這是一個無益的錯誤消息。順便說一下,我有includeExceptionDetailsInFault = true,但我仍然不會猜到。你是明星。添加爲答案,我會接受它。 – Mashton
很高興能有所幫助。我已經將它添加爲答案。 – Silvermind