我有一个WCF服务和一个应用程序。
我的应用程序调用wcf服务,如下所示:
string endpointAddress = "https:\\mywebsite.com\myservice\service.svc;
WSHttpBinding binding = new WSHttpBinding();
binding.MaxReceivedMessageSize = 524288000;
binding.CloseTimeout = new TimeSpan(0, 0, 20);
EndpointAddress endPointAddress = new EndpointAddress(address);
ChannelFactory<T> client = new ChannelFactory<T>(binding, endPointAddress);
IClientChannel proxy = (IClientChannel)client.CreateChannel();
我的服务的web.config文件是:
<wsHttpBinding>
<binding name="Secure" maxReceivedMessageSize="10485760" openTimeout="00:10:00" sendTimeout="00:30:00" closeTimeout="00:10:00">
<readerQuotas maxDepth="10485760" maxStringContentLength="10485760" maxArrayLength="10485760" maxBytesPerRead="10485760" maxNameTableCharCount="10485760" />
<security mode="Transport">
<transport clientCredentialType="None" />
</security>
</binding>
</wsHttpBinding>
但我的服务电话在30秒后超时。 为什么我的服务调用不使用Web.config超时?如果始终使用客户端设置,则具有web.config设置的原因是什么?我需要设置哪个超时属性以在30秒后停止我的服务呼叫超时?
答案 0 :(得分:0)
客户端:
SendTimeout用于初始化OperationTimeout,它控制发送消息的整个交互(包括在请求 - 回复情况下接收回复消息)。从CallbackContract方法发送回复消息时,此超时也适用。
打开和关闭通道时使用OpenTimeout和CloseTimeout(当没有传递显式超时值时)。
未使用ReceiveTimeout。
服务器端:
发送,打开和关闭超时与客户端(用于回调)相同。
ServiceFramework层使用ReceiveTimeout来初始化会话空闲超时。
所以在这种情况下我将SendTimeout属性设置为2分钟。虽然这并不能解释我的30秒超时。我觉得这可能与数据库连接超时有关