簡體   English   中英

WCF服務未正確綁定

[英]WCF Service doesn't take the right binding

我已經為一遍又一遍地問同樣的問題而感到抱歉。 我們正在使用WPF客戶端應用程序運行WCF服務,並希望通過WCF服務將大數據從客戶端應用程序傳輸到數據庫,此設置沒有什么特別的。 現在,當然,當嘗試以字節數組形式上傳數據(超過16kb)時,我收到通常的“已超出最大數組長度配額”,這使我在服務器端以及我的應用程序上配置了web.config客戶端上的.config包含更高的讀者配額。

現在,由於經常在stackoverflow上將其視為安靜,因此我做了很多研究,最后得出了通過跟蹤服務綁定的結果。

Trace.WriteLine(OperationContext.Current.EndpointDispatcher.ChannelDispatcher.BindingName)

這給了我http://tempuri.org/:BasicHttpBinding (盡管配置了其他命名空間),並引發了一個問題,即是否應用了我的自定義綁定。 您能否看一下我的web.config代碼的一部分(服務端)

<system.serviceModel>


<behaviors>

  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <dataContractSerializer maxItemsInObjectGraph="2147483646" />
    </behavior>
  </serviceBehaviors>
</behaviors>

<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IDataController" closeTimeout="00:05:00"
      openTimeout="00:05:00" receiveTimeout="00:05:00" sendTimeout="00:05:00"
      maxBufferPoolSize="500000000" maxBufferSize="500000000" maxReceivedMessageSize="500000000" messageEncoding="Mtom">
      <readerQuotas maxDepth="500000000" maxStringContentLength="500000000"
        maxArrayLength="500000000" maxBytesPerRead="500000000" maxNameTableCharCount="500000000" />
    </binding>

    </basicHttpBinding>
</bindings>

<services>
  <service name="DataController">
    <endpoint address="http://vs0092:81/DataController/DataController.svc"  
              binding="basicHttpBinding"
              bindingConfiguration="BasicHttpBinding_IDataController"

              contract="SMS.RC.IDataController" />
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />

  </service>
</services>

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />


</system.serviceModel>

現在客戶端app.config看起來像這樣

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding name="BasicHttpBinding_IDataController"
               openTimeout="00:05:00"
               sendTimeout="00:05:00"
               receiveTimeout="00:05:00"
               closeTimeout="00:05:00"
               maxBufferPoolSize="500000000"
               maxReceivedMessageSize="500000000"
               maxBufferSize="500000000">
        <readerQuotas maxDepth="500000000"
                      maxStringContentLength="500000000"
                      maxArrayLength="500000000"
                      maxBytesPerRead="500000000"
                      maxNameTableCharCount="500000000" />

      </binding>
     </basicHttpBinding>
     </bindings>
    <client>
        <endpoint address="http://vs0092:81/DataController/DataController.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IDataController"
            contract="FBCDataController.IDataController" name="BasicHttpBinding_IDataController" />
    </client>
</system.serviceModel>

那你看到問題了嗎? 我沒有,而且我在解決這個問題上確實付出了很多努力,但我想目前我的WCF知道如何做到這一點很小。 為什么不應用服務綁定? 實施良好的ServiceBehavior可能是一個問題嗎? 有沒有一種方法可以查詢服務的正確名稱? (我讀的必須是全名,包括名稱空間)

非常感謝,湯姆

我看不到您的配置有任何明顯的問題,但是這里有一些提示:

您可能想使用WCF配置工具查看/更改配置-它列出了所有可用設置,而不僅僅是默認情況下配置文件中的設置。 在“工具”菜單上。 我發現,如果我首先從那里打開它,然后立即將其關閉,則可以在解決方案資源管理器中右鍵單擊一個配置以針對該特定文件運行它。 不知道為什么我需要采取額外的步驟-您的里程可能會有所不同。

在WCF配置工具中,您還可以啟用跟蹤和日志記錄-與異常消息本身相比,WCF跟蹤和日志通常可以更好地了解發生某些錯誤時的錯誤信息。

最后,對於這么大的消息,您可能需要考慮使用流模型。 尋找一個可行的WCF流媒體示例,然后從那里開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM