如果未明确指定,WCF客户端是否使用与服务器相同的绑定设置?

时间:2018-07-16 11:59:53

标签: c# wcf wcf-binding

我正在尝试提供一种WCF服务,该服务允许使用“流传输”下载文件。

在服务器端的Web.config中,我具有以下绑定配置:

<bindings>
  <basicHttpBinding>
    <binding name="RemoteFileService"
             transferMode="Streamed"
             maxReceivedMessageSize="2147483647"
             maxBufferSize="2147483647">

      <readerQuotas maxDepth="2147483647"
                    maxStringContentLength="2147483647"
                    maxArrayLength="2147483647"
                    maxBytesPerRead="2147483647"
                    maxNameTableCharCount="2147483647" />        
    </binding>
  </basicHttpBinding>
</bindings>

将服务引用添加到客户端应用程序(在Visual Studio中)时,会在App.config中生成以下配置:

    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IDownloadTest" />
        </basicHttpBinding>
    </bindings>

如您所见,实际上并没有指定任何选项。

我找到了使用流传输here创建Web服务的教程。在“实施:WebServer”一章中,作者为客户端绑定指定了一系列选项。

现在,我的问题是:

  • 如果我没有在客户端的App.config中指定transferMode="Streamed",是否可以使用流式下载?
  • 换句话说:如果未在客户端绑定中指定这些设置,则WCF客户端是否使用与服务器相同的设置?还是我需要为服务器和客户端同时指定每个设置?
  • 与服务器设置不同的客户端设置是否优先于服务器设置?还是客户端和服务器上的不同设置导致配置停止工作? (不是在讨论客户端和服务器的不同绑定类型,而是诸如transferModemaxReceivedMessageSize之类的内容)
  • 客户端指定超时(例如sendTimeoutopenTimeout)而服务器不指定超时(例如本文中的内容)是否有优势?
  • 要使流式文件传输正常工作,还有其他必要吗? (我听说您不能使用FileStream,因为它无法序列化,而我们应该使用MemoryStream,但是其他来源似乎在广泛使用FileStream。)

我发现了一些类似的问题,但是他们主要是在谈论端点或不同的绑定类型(例如,客户端为NetTcpBinding,服务器为BasicHttpBinding

0 个答案:

没有答案