我有一个WCF服务,它使用tcp进行通信。当我尝试将文件从客户端传输到服务时,如果我在同一台计算机中执行此操作,其中客户端和服务中的配置文件使用localhost作为URL,我没有任何问题。
但是,如果我尝试在客户端位于局域网中的其他计算机时执行相同操作,则会出现以下异常:
System.TimeoutException:发送到net.tcp://192.168.1.5:7997 / CMMSHost的请求操作未在配置的超时(00:01:00)内收到回复。分配给此操作的时间可能是较长超时的一部分。这可能是因为服务仍在处理操作,或者因为服务无法发送回复消息。请考虑增加操作超时(通过将通道/代理强制转换为IContextChannel并设置OperationTimeout属性)并确保该服务能够连接到客户端。
但是,如果我尝试使用其他操作,例如搜索信息或添加寄存器以及任何其他类型的操作,则应用程序可以正常工作。
所以问题在于传输文件。
在服务中我使用此配置:
<endpoint address=""
binding="netTcpBinding"
bindingConfiguration="tcpBinding"
name="NetTcpBindingEndpoint"
contract="GTS.CMMS.Service.IService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint contract="IMetadataExchange" binding="mexTcpBinding" address="net.tcp://localhost:5000/mex" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="behaviorConfig">
<!--
<serviceMetadata httpGetEnabled="true" />-->
<!--Necesario para poder enviar excepciones desde el servicio al cliente.-->
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceThrottling maxConcurrentCalls="100" maxConcurrentSessions="100" />
<serviceMetadata/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<netTcpBinding>
<binding name="tcpBinding" maxBufferSize="67108864"
maxReceivedMessageSize="67108864" maxBufferPoolSize="67108864"
transferMode="Buffered" closeTimeout="00:00:10"
openTimeout="00:00:10" receiveTimeout="00:20:00"
sendTimeout="00:01:00" maxConnections="100">
<security mode="None"/>
<readerQuotas maxArrayLength="67108864" maxBytesPerRead="67108864" maxStringContentLength="67108864"/>
<reliableSession enabled="true" inactivityTimeout="00:20:00" />
</binding>
</netTcpBinding>
</bindings>
</system.serviceModel>
在客户端:
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:20:00"
enabled="true" />
<security mode="None">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<messa
ge clientCredentialType =“Windows”/&gt;
感谢。
答案 0 :(得分:2)
你的应用程序是否适用于kbs的小尺寸文件?如果是,那么对于更大尺寸的文件,使用transferMode =“Streamed”而不是transferMode =“Buffered”。您必须相应地更改配置。
如果您的应用程序不适用于更小的文件,那么您的应用程序就会出现问题。 构建应用程序并重新生成代理并尝试调试应用程序。
您也可以参考这些链接 http://www.codeproject.com/Articles/166763/WCF-Streaming-Upload-Download-Files-Over-HTTP http://www.codeproject.com/Articles/33825/WCF-TCP-based-File-Server