3

RoutingServiceで OperationTimeout を設定するのに苦労しています

問題は、メッセージの転送先のサービスが応答を返すのに 1 分以上かかることです。これにより、RoutingService で OperationTimeout 例外が発生します。

RoutingService のクライアント プロキシで OperationTimeout を設定しようとしましたが、成功しませんでした。

私がしたことは、Endpoint Behavior を追加し、ApplyClientBehavior メソッドにカスタム IClientMessageInspector を追加することです。

このコード スニペットに示すように、カスタム ClientMessageInspector で OperationTimeout を設定します。

    public object BeforeSendRequest(ref Message request, IClientChannel channel)
    {
        var contextChannel = channel as IContextChannel;
        contextChannel.OperationTimeout = new TimeSpan(0, 10, 0);

        return request;
    }

私にとっては、この時点では遅すぎるように思われるため、RoutingService で生成されたプロキシはこの設定を気にしません。

助言がありますか?

4

2 に答える 2

1

これを解決する方法を見つけました。

ルーターのクライアント エンドポイントのバインディングで SendTimeout を設定するだけです。プロキシを作成するとき、ルーターはそのチャネルで OperationTimeout=SendTimeout を設定します。

            // add the endpoint the router uses to receive messages
            serviceHost.AddServiceEndpoint(
                 typeof(IRequestReplyRouter),
                 new BasicHttpBinding(), 
                 "http://localhost:8000/routingservice/router");

            // create the client endpoint the router routes messages to
            var client = new ServiceEndpoint(
                                            ContractDescription.GetContract(typeof(IRequestReplyRouter)), 
                                            new NetTcpBinding(),
                                            new EndpointAddress("net.tcp://localhost:8008/MyBackendService.svc"));

            // Set SendTimeout, this will be used from the router generated proxy as OperationTimeout
            client.Binding.SendTimeout = new TimeSpan(0, 10, 0);
于 2012-12-18T10:13:57.710 に答える
1

web.config で、以下の SendTimeout を設定します

<binding name="myBindingName" sendTimeout="00:10:00"
                 closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" 
                 maxBufferSize="2147483647"
                 maxBufferPoolSize="2147483647"
                 maxReceivedMessageSize="2147483647"
                 crossDomainScriptAccessEnabled="true" />
于 2012-12-17T14:22:01.653 に答える