wcf - 在 Debug模式下以编程方式设置 WCF 超时

标签 wcf configuration timeout

我在服务器和客户端(均用 C# 编写)之间的通信中使用 WCF。

在 Release模式下,超时应设置为 ~20 秒,但在 Debug模式下,我想将它们设置为更高的值,以便我可以在不发生超时的情况下调试/单步执行我的代码。

我知道我可以通过修改 app.config 文件来更改超时。但是,我有两个不同的绑定(bind)和 4 个超时值,所以我必须在几个地方进行更改,而且很容易忘记。

为了解决这个问题,我想在我的代码中有一个小的#if 调试部分,它以编程方式将超时值更改为 1 小时。

我尝试使用以下代码来执行此操作:

Configuration configuration = 
       ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ServiceModelSectionGroup serviceModel = 
       ServiceModelSectionGroup.GetSectionGroup(configuration); 

BindingsSection bindings = serviceModel.Bindings;

foreach (var configuredBinding in bindings.WSHttpBinding.ConfiguredBindings)
{
 configuredBinding.CloseTimeout = new TimeSpan(0, 30, 0);
 configuredBinding.OpenTimeout = new TimeSpan(0, 30, 0);

但是 *Timeout 属性是只读的,所以我得到一个编译错误。

我不喜欢以编程方式从头开始创建绑定(bind)的想法。如果我更改 app.config 中的某些属性,我必须记住在代码中进行相同的更改,以确保调试行为类似于发布行为(超时除外..)

如何处理?

最佳答案

您可以执行以下操作:

  • 在代码
  • 中创建绑定(bind)和端点
  • 设置绑定(bind)实例的超时时间
  • 然后使用这两个元素创建您的客户端代理

  • 就像是:
    BasicHttpBinding myBinding = new BasicHttpBinding("ConfigName");
    myBinding.CloseTimeout = .......
    myBinding.OpenTimeout = .......
    myBinding.ReceiveTimeout = .......
    myBinding.SendTimeout = .......
    
    EndpointAddress myEndpoint = new EndpointAddress("http://server:8181/yourservice");
    
    YourServiceClient proxy = new YourServiceClient(myBinding, myEndpoint);
    

    这样,您可以在描述绑定(bind)超时时利用基本配置,但您可以调整您想要的设置并从中创建您的客户端代理。

    关于wcf - 在 Debug模式下以编程方式设置 WCF 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1826392/

    相关文章:

    bash - 如果文件N秒没有改变就取消 "tail -f"?

    javascript - 在 Angular 单元测试中,如何清理 $timeout promise ,以免它们持续存在?

    javascript - 客户端 JavaScript 和/或 JavaScript 代码使用 jquery 调用 WCF 服务检索 System.IO.Stream 的集合?

    jquery - 检索 HTTP header token

    django - 在 svn/hg/git/etc 中优雅地处理特定于站点的设置/配置?

    java - 将 logback.xml 放在 Tomcat 的什么位置?

    c# - Selenium - 搜索带有类和文本的元素

    c# - 获取地址已在使用异常。自托管 wcf 服务

    wcf - 如何在 WCF 服务中使用消息安全性和用户名 clientCredentialType 而无需证书?

    symfony - 如何在 nginx 的子目录中安装 symfony2 应用程序