2011-05-03 54 views
70

我有一個WCF服務在我的本地機器上正常運行。我把它放在服務器上,我收到以下錯誤:這可能是由於服務端點綁定不使用HTTP協議

An error occurred while receiving the HTTP response to http://xx.xx.x.xx:8200/Services/WCFClient.svc . This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server logs for more details.]

我已經去了服務的網址,它工作正常。我爲這個函數所做的所有事情都是將一個字符串返回給圖像名稱,所以傳遞的數據不是很多。我跟蹤了日誌,它給了我相同的信息。這裏是我的客戶端配置:

<binding name="basicHttpBinding_IWCFClient" closeTimeout="00:01:00" 
     openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
     bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
     maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" 
     messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
     allowCookies="false"> 
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
        maxNameTableCharCount="2147483647" /> 
    <security mode="None"> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
    </security> 
</binding> 
<endpoint name="basicHttpBinding_IWCFClient" 
    address="http://localhost:4295/Services/WCFClient.svc" 
    binding="basicHttpBinding" 
    bindingConfiguration="basicHttpBinding_IWCFClient" 
    behaviorConfiguration="WCFGraphicManagementTool.Services.ClientBehavior" 
    contract="WCFClient.IWCFClient" /> 

這裏是我的服務器配置:

<service behaviorConfiguration="WCFGraphicManagementTool.Services.WCFClientBehavior" 
    name="WCFGraphicManagementTool.Services.WCFClient"> 
    <endpoint name="basicHttpBinding_IWCFClient" 
     address="" 
     binding="basicHttpBinding" 
     contract="WCFGraphicManagementTool.Contracts.IWCFClient" /> 
    <endpoint 
     address="mex" 
     binding="mexHttpBinding" 
     contract="IMetadataExchange" /> 
</service> 
<behavior name="WCFGraphicManagementTool.Services.WCFClientBehavior"> 
    <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
    <serviceThrottling maxConcurrentCalls="120" maxConcurrentSessions="120" 
         maxConcurrentInstances="120" /> 
    <serviceMetadata httpGetEnabled="true" /> 
    <serviceDebug includeExceptionDetailInFaults="true" /> 
</behavior> 

這將是服務器上的設置,因爲它的工作原理我的本地機器上?

+0

我解決了我的問題,因爲我在這裏解釋:http://stackoverflow.com/questions/5537794/error-while-deserializing-the-object-in-wcf/8415908#8415908 – Adi 2011-12-07 13:25:04

+0

似乎你比我更進一步。也許你可以給我一個接下來要做什麼的指示。 http://stackoverflow.com/questions/16628382/setting-up-wcf-tcp-service-in-a-web-application – 2013-05-25 08:35:52

+0

任何機會,你會接受任何答案,因爲我懷疑你還在等待得到一個 ? :) – Noctis 2014-08-19 06:03:11

回答

1

我想出了這個問題。它最終成爲我的配置文件的路徑是錯誤的。 WCF的錯誤有時候非常有用。

+0

你是什麼意思?該服務的路徑是錯誤的? – levi 2013-02-13 07:53:24

+0

不是。我的配置文件在服務中的路徑是錯誤的。 – 2013-04-04 18:13:41

69

我有這個問題,「這可能是由於服務端點綁定不使用HTTP協議」和WCF服務將關閉(在開發計算機)

我想通了:在我的情況下,問題是因爲枚舉的,

我解決了使用這種

[DataContract] 
    [Flags] 
    public enum Fruits 
    { 
     [EnumMember] 
     APPLE = 1, 
     [EnumMember] 
     BALL = 2, 
     [EnumMember] 
     ORANGE = 3 

    } 

我不得不來裝飾我的枚舉與DataContract,標誌和所有各有EnumMember屬性枚舉成員。

我解決了這個看着這個msdn Reference後:

+1

謝謝。這正是我必須做的。 – 2012-08-29 20:02:47

+1

謝謝你,你只是節省了我很多時間 – nixon 2012-12-11 00:11:54

+4

非常感謝..節省了我的時間很多 – amesh 2013-02-06 06:14:14

68

我覺得有序列化的問題,你可以找到確切的錯誤只需要在<configuration>部分的服務配置中添加下面的代碼即可。

配置更新後"App_tracelog.svclog"文件將創建,您的服務存在只需要打開.svclog文件,並在左側面板上找到紅色線,這是錯誤,並查看其描述以獲取更多信息。

我希望這會幫助找到你的錯誤。

<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing"> 
     <listeners> 
      <add name="ServiceModelTraceListener" /> 
     </listeners> 
     </source> 
     <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing"> 
     <listeners> 
      <add name="ServiceModelTraceListener" /> 
     </listeners> 
     </source> 
     <source name="System.Runtime.Serialization" switchValue="Verbose,ActivityTracing"> 
     <listeners> 
      <add name="ServiceModelTraceListener" /> 
     </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add initializeData="App_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp" /> 
    </sharedListeners> 
    </system.diagnostics> 
+3

這實際上節省了我的一天。這確實是一個序列化問題,我錯過了跟蹤中的System.Runtime.Serialization源。 – julealgon 2013-10-29 14:00:18

+0

不錯......不知道這個:) – Noctis 2014-08-19 06:01:36

+0

史詩!該錯誤將任何異常都未提供的錯誤寫入App_tracelog.svclog文件 – fubo 2014-10-27 15:51:40

8

解決方案與DataContract,標誌爲枚舉看起來有點醜。在我的情況下,通過在枚舉中添加類似「NotSet = 0」的問題已得到解決:

public enum Fruits 
{ 
    UNKNOWN = 0, 
    APPLE = 1, 
    BALL = 2, 
    ORANGE = 3 
} 
+0

啊,是的,對不起,剛剛評論了進一步的答案。我也看到過這種行爲。 – 2014-10-29 17:22:52

+0

我不能相信這能解決問題@。@ – Sherwin 2016-06-16 02:22:58

1

我看到了由對象圖中的循環引用引起的此錯誤。包含一個指向父子對象的指針將導致序列化程序循環,並最終超過最大消息大小。

1

我的問題是,我的服務返回類型是字符串。 但我回到XML類型的字符串:被拋出

<reponse><state>1</state><message>Operation was successfull</message</response> 

這樣的錯誤。

0

此錯誤可能是因爲合同不匹配。考慮下面的三層應用...

UI層
|
工藝層
|
數據訪問層
- >進程和UI層之間的契約具有相同的缺失枚舉(Onhold = 3)。枚舉:Start = 1,Stop = 2。 - >數據訪問與處理層之間的契約枚舉Enum:Start = 1,Stop = 2,Onhold = 3.

在這種情況下,我們將得到相同的錯誤過程層響應。

多層應用程序中的其他合同不匹配也會出現同樣的錯誤。

+0

你的答案似乎與這個問題沒有任何關係。還要注意,OP已經解決了他的問題 - [配置文件的路徑錯誤](http://stackoverflow.com/a/6018328/622391)。 – 2013-05-09 04:48:38

1

我有這個問題,因爲我配置我的WCF服務返回一個System.Data.DataTable。

它在我的測試HTML頁面中工作正常,但是當我把它放到我的Windows窗體應用程序中時就爆炸了。

我不得不進入並將服務的操作合同簽名從DataTable更改爲DataSet,並相應地返回數據。

如果您遇到此問題,您可能需要爲您的服務添加額外的操作合同,以便您不必擔心會破壞依賴於現有服務的代碼。

1

這可能是由於很多原因造成的;下面是那幾個:

  1. 如果您正在使用複雜的數據契約對象(這意味着有更多的孩子自定義對象自定義對象),請確保您擁有所有裝飾有DataContract自定義對象和DataMember屬性
  2. 如果您的數據協定對象使用繼承,請確保所有基類都具有DataContract和DataMember屬性。此外,您需要讓基類使用 [KnownType(typeof(BaseClassType))]屬性(check out more info here on this)指定派生類。

  3. 確保您的所有數據合同對象屬性都具有獲取和設置屬性。

1

我的問題是太多的項目正在客戶端和服務器之間傳遞。我必須在雙方的行爲中改變這個設置。

<dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
+0

我使用了相同的解決方案。但是我必須使用@ 100r建議的服務跟蹤查看器來查看這是錯誤。 – 2017-07-05 08:23:17

9

在我的例子中,錯誤的產生是因爲我的一個複雜類型有一個沒有set方法的屬性。

串行器由於這個事實而拋出異常。增加了內部設置方法,它一切正常。

找出爲什麼會發生這種情況的最佳方法(在我看來)是啓用跟蹤日誌記錄。

我通過添加下面的部分我的web.config實現了這個:

<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing"> 
     <listeners> 
      <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData= "c:\log\Traces.svclog" /> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default" /> 
     </listeners> 
     </source> 
     <source propagateActivity="true" name="System.ServiceModel" switchValue="Verbose,ActivityTracing"> 
     <listeners> 
      <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData= "c:\log\Traces.svclog" /> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default" /> 
     </listeners> 
     </source> 
    </sources> 
    <trace autoflush="true" /> 
    </system.diagnostics> 

設置後,我跑我的客戶,得到了異常,並檢查了「Traces.svclog」文件。從那裏,我只需要找到例外。

0

這可能與您的具體問題無關,但您提到的錯誤消息有很多原因,其中之一是對[OperationContract]使用返回類型,該類型可以是抽象的,接口的,也可以不爲WCF所知客戶端代碼。

檢查後(和解決方案)以下

https://stackoverflow.com/a/5310951/74138

0

我認爲解決這個最好的方法是按照錯誤的意見,因此尋找服務器日誌。 要啓用日誌,我添加

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

那你去到c:\日誌\ TracesServ_ce.svclog與微軟 服務跟蹤查看器打開它。看看問題到底是什麼。

0

我掙扎了幾天,並嘗試從這篇文章和其他許多人的每一個答案,並分享我的解決方案,因爲症狀是相同的,但問題是不同的。

問題是應用程序池配置了內存限制,並且它在一段可變的時間後才被回收。

希望這可以幫助別人!
問候,

0

在我的情況

我的服務有功能download Files

,但此錯誤只顯示了在試圖下載Big Files

所以我發現this answer以增加maxRequestLength到需要的值在web.config

我知道這是奇怪的,但問題就迎刃而解了

,如果你不進行任何上傳或下載操作,也許這個答案不會幫助你

0

也有這個問題,這是由於忘記來裝飾我的模型DataContract和DataMember屬性

0

對我來說這個錯誤的解決方案很奇怪。這是端口地址EndpointAddress的問題。在您的文件的Visual Studio端口地址(例如Service1。svc)和你的wcf項目的端口地址必須是相同的,你給EndpointAddress。讓我詳細描述你的這個解決方案。

有兩個步驟來檢查端口地址。

  1. 在您的WCF項目右鍵點擊你的服務文件(如Service1.svc) - >比在瀏覽器中的瀏覽器選擇現在查看你的URL喜歡http://localhost:61122/Service1.svc所以現在記下你的端口地址爲61122

  2. 右擊單擊WCF項目 - >比選擇屬性 - >轉到Web選項卡 - >現在服務器sectio n - > select 使用Visual Studio開發服務器 - > select 特定端口並給出我們早先從我們的Service1.svc服務中找到的端口地址。那是(61122)

此前我有不同的端口地址。正確指定端口地址後,我給EndpointAddress,我的問題已解決。

我希望這可以解決您的問題。

相關問題