Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf 如何在运行时更改basicHttpBinding sendTimeout?_Wcf - Fatal编程技术网

Wcf 如何在运行时更改basicHttpBinding sendTimeout?

Wcf 如何在运行时更改basicHttpBinding sendTimeout?,wcf,Wcf,我有一个使用WCF使两个应用程序相互通信的小而基本的工作示例。侦听服务器的我的客户端应用程序在app.config文件中包含XML,用于配置我的设置。编译时硬编码的一个设置是隐藏在basicHttpBinding设置下的sendTimeout设置。例如: <configuration> <system.serviceModel> <bindings> <basicHttpBinding>

我有一个使用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"


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

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


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

请注意,在上面的代码片段中,该值设置为15秒。那只是为了我的测试目的…非常感谢。我会尝试一下,让你知道它是如何工作的!如何从旧的“BasicHttpBinding”实例复制设置?这样我就不必用代码替换我的app.config的大部分内容了?这解决了更多的问题。如何处理旧的服务客户端?
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;