3

我有一个使用 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 如此陌生,我不知道从哪里开始?

4

1 回答 1

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 个(或任意数量)绑定配置,并创建一个新客户端并将其配置为使用该绑定,这几乎与在代码中执行此操作相同。即使这样,您也必须实例化一个新的客户端代理才能使用不同的绑定配置。

于 2012-06-05T18:41:50.587 回答