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