none
WCF 傳圖片的問題 RRS feed

  • 問題

  • 我使用  WCF  去insert 一筆資料  其中一個欄位是 Byte 要拿來存放 圖片
    可是  我在UI 端若選取  超過  100k 的圖片 就掛點了 
    我的 數值也都調成   2147483647
    還是不行   有什麼地方要注意嘛  還是 因為 我走  wsHttp  是 Http 的關係  沒辦法傳這麼大的東西
    2009年8月5日 上午 06:50

解答

所有回覆

  • 你可能要判斷掛點的原因是什麼。

    如果你是 IIS 7 的話,可能還要檢查:
    http://www.dotblogs.com.tw/regionbbs/archive/2009/02/16/iis7_fileupload_maxallowedcontentlength.aspx
    小人物一枚。
    2009年8月5日 上午 07:02
    版主
  • 可是 我使用的是IIS6  我也不知要去哪裡設定
    因為  我傳的圖檔  也才  100 多K  應該不會被擋吧 
    請再開識一下
    2009年8月5日 上午 07:09
  • WCF 有一個流量控制的設定。
    好像是 MaxReceivedMessageSize 這個設定(在 binding 的設定中)。
    小人物一枚。
    2009年8月5日 上午 07:20
    版主
  • 我剛看過了  那個設定是在 Asp .net 呼叫端耶
    還有 我是在  winxp 上  iis5  我也找不到 設定檔案上傳限制的問題
    這個問題   是在哪一層出問題呢?!
    2009年8月5日 上午 08:23
  • 1. 你好像到現在都沒交代你 WCF 的 hosting 是什麼吧?
    2. ASP.NET 的會受到 Web.config 的限制,至於 IIS5 的好像就沒有特別在 IIS 上有設定,那是 IIS 6 開始才有的。
    小人物一枚。
    2009年8月5日 上午 08:28
    版主
  • Sorry 你指的 hosting 是不是 我指的是我用  wshttpbinding
     
    2009年8月5日 上午 08:32
  • 我自己有寫過 Silverlight 配合 WCF (host 在 ASP.NET)上傳資料的程式,但碰到的只有 IIS 7 上的流量管制設定問題(預設 30MB),其他的最多我也只改了 Web.config 的 maxRequestLength 和 BasicHttpBinding 的 MaxReceivedMessageSize 而已,WSHttpBinding 我沒試過,你可以把你的 binding 改成 BasicHttpBinding 看看。
    小人物一枚。
    2009年8月5日 上午 08:41
    版主
  • 有沒有錯誤訊息出來?

    Hosting是指您WCF是Host在IIS上, 還是透過一個exe檔案去當WCF服務.
    年度軟體技術盛會微軟Tech.Days 9月22日全新登場, 您還在等什麼? 快報名就對了.
    2009年8月5日 上午 08:45
  • 什麼叫做掛點?????
    2009年8月5日 上午 08:55
  • 不好意思  我把問題  講清楚一點
    目前  作業系統是 winXp   用 visual studio 2008 開發 WCF 那一層
    winXP 的IIS 是 5.1 版

    我的功能 是Client 端  會傳圖片 轉成  byte[] array 到 WCF 那一層
    可是  只要圖檔大一點  就會有錯誤  傳  一百多K 就不行

    Client 端web.config
    如下
    -------------------------------------------------------------------------------
    <system.serviceModel>
      <bindings>
       <basicHttpBinding>
       
        <binding name="BasicHttpBinding_IUserService" closeTimeout="00:01:00"
         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
         allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
         maxBufferSize="65536000" maxBufferPoolSize="524288" maxReceivedMessageSize="65536000"
         messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
         useDefaultWebProxy="true">
         <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="1638400000"
          maxBytesPerRead="4096" maxNameTableCharCount="1638400000" />
         <security mode="None">
          <transport clientCredentialType="None" proxyCredentialType="None"
           realm="" />
          <message clientCredentialType="UserName" algorithmSuite="Default" />
         </security>
        </binding>
       </basicHttpBinding>
      </bindings>
      <client>
       <endpoint address="http://localhost:59693/UserService.svc" binding="basicHttpBinding"
        bindingConfiguration="BasicHttpBinding_IUserService" contract="UserServiceReference.IUserService"
        name="BasicHttpBinding_IUserService" />
      </client>
     </system.serviceModel>
    ------------------------------------------------------------------------------------------------------------------------------------  
    WCF 的 web.config
    -------------------------------------
    <system.serviceModel>
       
       <services>
         
          <service behaviorConfiguration="MAMS_WCFService_User.UserServiceBehavior" name="MAMS_WCFService_User.UserService">
            <endpoint address="" binding="basicHttpBinding"  contract="MAMS_WCFService_User.IUserService">
             
        <identity>
                <dns value="localhost"/>
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
          </service>
        </services>
        <behaviors>
      


      <serviceBehaviors>
            <behavior name="Throttled">
              <serviceThrottling maxConcurrentSessions="1000"/>
            </behavior>
            <behavior name="MAMS_WCFService_User.Service1Behavior">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
            <behavior name="MAMS_WCFService_User.UserServiceBehavior">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    -----------------------------------------------------------------------
     

    2009年8月6日 上午 05:23
  • 掛點=錯誤?
    哪錯誤訊息?

    2009年8月6日 上午 05:34
  • {"遠端伺服器傳回未預期的回應: (400) Bad Request。"}

    若圖片只有  5k 6k  就不會有錯誤訊息
    2009年8月6日 上午 05:38
  • 你有上Google大師嗎?
    這個訊息常發生,但不一定是WCF的問題.
    我喵一下有說到幾個原因.
    1.錯誤的格式.
    2.你封包太大被防火牆擋下來.
    ......

    2009年8月6日 上午 05:47
  •    我有上 google 查很久了
     但 還是  查不到  到底要調那邊的參數

     
    剛剛也試過把防火牆關調  還是不行
    有半法解嘛?!

    2009年8月6日 上午 06:01
  • (400) Bad Request 是 HTTP 通用的錯誤.很難去查.一個訊息繞呀繞,繞到哪裡.經過哪些服務...要請妳們網管幫你察.
    2009年8月6日 上午 06:27
  • ㄟ 目前的環境  都在 本機上 
    是否有這方面經驗的人來  說說看呢

    我是再想 是否  WCF 的web.config 要調參數 但不知 要加什麼  才可以
    2009年8月6日 上午 06:34
  • WCF 端沒改,Client 改了也沒用啊?
    http://msdn.microsoft.com/zh-tw/library/ms789010.aspx

    MaxReceivedMessageSize 的預設是 64KB。
    小人物一枚。
    • 已標示為解答 Lolota Lee 2009年8月12日 上午 05:20
    2009年8月6日 上午 06:57
    版主
  • 小朱  真的很感謝您
    可是我真的不知  要在wcf 端去設定  maxReceivedMessageSize
    可以給點 提示嘛  謝謝
    2009年8月6日 上午 07:01
  • 布利你好

    我目前跟你遇到一樣的問題

    只要從本端傳大量資料過去就會 發生

    {"遠端伺服器傳回未預期的回應: (400) Bad Request。"}

    不知道你是怎麼處理的

    不知可否分享一下

    感謝
    2009年9月4日 上午 03:03
  • 在上面有提到maxReceivedMessageSize的那個部分的區塊,也就是binding的設定要去調整,如果Client會收到大量資料,那Client的部分要調整;Service端會收到大量資料的話,那麼Service端就要調整。
    在Visual Studio 2008的"工具"功能表中有一個WCF組態編輯器,可以利用這個去作。
    提問時請清楚描述問題、留意應有禮節;嚴禁一行文、注音文 blog : http://www.dotblogs.com.tw/bauann/
    2009年9月4日 上午 08:35
    版主
  • messageEncoding="Text"

    傳這類型的資料,請用Mtom.
    它才有支援訊息傳輸最佳化機制.

    WCF MTOM
    2009年9月24日 上午 10:15