如何在运行时更改basicHttpBinding sendTimeout?

时间:2012-06-05 17:23:03

标签: wcf

我有一个小的,基本的工作示例,使用WCF让两个应用程序相互通信。我的客户端应用程序监听服务器,在app.config文件中包含配置我的设置的XML。在编译时硬编码的一个设置是埋在basicHttpBinding设置下的sendTimeout设置。例如:

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IScriptRunHost" closeTimeout="00:05:00"
                    openTimeout="00:05:00" receiveTimeout="00:05:00" sendTimeout="00:00:15"

我希望能够在运行时设置sendTimeout属性(使用c#)。然而,对于WCF来说这么新,我不知道从哪里开始?

1 个答案:

答案 0 :(得分:8)

您可以在代码中执行配置文件中的任何操作。您可以通过创建新的客户端代理并在运行时为其分配所需的绑定配置来动态设置超时或各种配置详细信息:

ServiceClient _client = new ServiceClient(new BasicHttpBinding { SendTimeout = new TimeSpan(2, 0, 0) },new EndpointAddress("http://localhost:8089/MyService.svc"));

或:

BasicHttpBinding myBinding = new BasicHttpBinding();
                 myBinding.OpenTimeout = new TimeSpan(2, 0, 0);
                 myBinding.CloseTimeout = new TimeSpan(2, 0, 0);
                 myBinding.SendTimeout = new TimeSpan(2, 0, 0);

ServiceClient _client = new ServiceClient();
              _client.Endpoint.Binding = myBinding;

但是您可以通过浏览代码来推断,如果您想在运行时更改超时值,服务端点或几乎任何绑定配置,则必须拆除以前的客户端代理和处理它并使用你创建的新的,显然这会产生一些不良影响,因为你的客户将暂时与你的服务断开连接,所以请记住这一点。您还可以在配置文件中定义2或3(或任意多个)绑定配置,并创建新客户端并将其配置为使用该绑定,这与在代码中执行此操作几乎完全相同。即使这样,您也必须实例化一个新的客户端代理才能使用不同的绑定配置。