不支持WCF配置

不支持WCF配置,wcf,configuration,Wcf,Configuration,配置文件中配置的WCF绑定有一些奇怪的行为。 我们进行的服务调用可能是长时间运行的,因此我们需要发送/操作超时超过默认的1分钟。 我们的WCF配置反映了这一点,将sendTimeout设置为10分钟 但是,如果服务呼叫超过1分钟,则会显示一条错误消息,说明操作在1分钟标记处1分钟后超时。 调试我们检查配置是否正确,如下所示(为了调试,这里所做的服务调用少于1分钟): 公共类MyWcfClient:ClientBase,IMyWcf { 公共结果类型MyMethod() { var origina

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

但是,如果服务呼叫超过1分钟,则会显示一条错误消息,说明操作在1分钟标记处1分钟后超时。 调试我们检查配置是否正确,如下所示(为了调试,这里所做的服务调用少于1分钟):

公共类MyWcfClient:ClientBase,IMyWcf
{
公共结果类型MyMethod()
{
var originalBinding=base.Endpoint.Binding;
var result=this.Channel.MyMethod();
var changedBinding=base.Endpoint.Binding;
返回结果;
}
}
此处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;     
    }
}
公共类MyWcfClient:ClientBase,IMyWcf
{
公共方法()
{
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;
    }
}
公共类MyWcfClient:ClientBase,IMyWcf
{
公共结果类型MyMethod()
{
((IContextChannel)base.Channel).OperationTimeout=TimeSpan.FromMinutes(10);
var result=this.Channel.MyMethod();
返回结果;
}
}
在这里,当进行长时间运行的服务呼叫时(虽然不到10分钟),没有超时

因此,它可以在代码中显式设置超时,但我们希望在配置文件中完成这一切

绑定与此类似(在服务器端和客户端上相同):


... 

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

原来这是遥测客户端Wcf扩展中的一个错误。没有它,绑定将被保留,超时将正常工作


这是遥测客户端Wcf扩展中的一个错误。没有它,绑定将被保留,超时将正常工作

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