在何处或如何配置服务超时?

时间:2014-07-18 09:35:10

标签: c# wcf service timeout

我有一个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秒后停止我的服务呼叫超时?

1 个答案:

答案 0 :(得分:0)

Using This Link I found that:

客户端:

SendTimeout用于初始化OperationTimeout,它控制发送消息的整个交互(包括在请求 - 回复情况下接收回复消息)。从CallbackContract方法发送回复消息时,此超时也适用。

打开和关闭通道时使用OpenTimeout和CloseTimeout(当没有传递显式超时值时)。

未使用ReceiveTimeout。

服务器端:

发送,打开和关闭超时与客户端(用于回调)相同。

ServiceFramework层使用ReceiveTimeout来初始化会话空闲超时。

所以在这种情况下我将SendTimeout属性设置为2分钟。虽然这并不能解释我的30秒超时。我觉得这可能与数据库连接超时有关