【问题标题】:WCF configuration not honored不支持 WCF 配置
【发布时间】:2019-12-16 21:51:26
【问题描述】:

我们在配置文件中配置的 WCF 绑定有一些奇怪的行为。 我们执行可能长时间运行的服务调用,因此我们需要比默认的 1 分钟更长的发送/操作超时。 我们的 WCF 配置反映了这一点,将 sendTimeout 设置为 10 分钟。

但是,如果服务调用超过 1 分钟,则会出现一条错误消息,指出操作在 1 分钟后超时。 调试这个我们检查配置是否正确,像这样(这里为了调试目的,服务调用少于1分钟):

public class MyWcfClient : ClientBase<IMyWcf>, IMyWcf 
{
    public ResultType MyMethod()
    {
        var originalBinding = base.Endpoint.Binding;

        var result = this.Channel.MyMethod();

        var changedBinding = base.Endpoint.Binding;

        return result;
    }
}

这里 originalBinding 将包含配置的设置(sendTimeout = 10 分钟等)。但调用后,检查 changedBinding 变量,绑定中还有其他值,其中 sendTimeout 为 1 分钟 并且似乎后一个是服务调用使用的一个,考虑到在进行长时间运行的调用时的超时响应。绑定的类型也从 NetTcpBinding 更改为 CustomBinding。

现在稍微修改一下代码:

public class MyWcfClient : ClientBase<IMyWcf>, IMyWcf 
{
    public void MyMethod()
    {
        var originalBinding = base.Endpoint.Binding;

        var sendTimeout = ((IContextChannel)base.Channel).OperationTimeout;

        var changedBinding = base.Endpoint.Binding;     
    }
}

在这里,当涉及到绑定值时,我们会得到与以前相同的行为。变量 sendTimeout 的值是 1 分钟,所以看起来更改后的绑定值再次被兑现。

第三个示例,在调用服务之前显式设置 OperationTimeout 是有效的。

public class MyWcfClient : ClientBase<IMyWcf>, IMyWcf 
{
    public ResultType MyMethod()
    {
        ((IContextChannel)base.Channel).OperationTimeout = TimeSpan.FromMinutes(10);
        var result = this.Channel.MyMethod();
        return result;
    }
}

在此进行长时间运行的服务调用(尽管少于 10 分钟)时,没有超时。

所以它可以在代码中显式设置超时,但我们希望在配置文件中完成所有操作。

绑定看起来与此类似(服务器端和客户端相同):

<binding name="NetTcpBinding" 
    sendTimeout="00:10:00" 
    receiveTimeout="00:10:00" 
    openTimeout="00:10:00" 
    closeTimeout="00:10:00"
    transactionFlow="false" 
    portSharingEnabled="true" 
    maxReceivedMessageSize="2147483647" 
    maxBufferPoolSize="2147483647" 
    maxBufferSize="2147483647" >
    ... 
</binding>

对此有何解释?我们可以做些什么来实现配置?

【问题讨论】:

    标签: wcf configuration


    【解决方案1】:

    原来这是 telemetryClient Wcf 扩展中的一个错误。没有它,绑定将保留并且超时有效。

    https://github.com/Microsoft/ApplicationInsights-SDK-Labs/issues/124

    【讨论】:

      猜你喜欢
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 2015-06-16
      相关资源
      最近更新 更多