Аякс с работой WCF. но несколько минут спустя, не работает - PullRequest
0 голосов
/ 11 мая 2010

Я новичок в WCF. Я уже писал ajax для использования веб-службы, но в этом проекте я пытаюсь использовать ajax для WCF.

После того, как я собрал проект и wcf с помощью ajax, я получил возврат успешно. Но через 10 или более минут я не получаю возврата, ajax вызывает функцию error, а fiddler ничего не возвращает.

Если я перекомпилирую проект без изменения исходного кода, я снова получу возвращение успешно.

Кто-нибудь, кто испытал это или знает, почему это может быть?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 июня 2010

Вот лучшая практика для вызова служб WCF:

    public static void CallService<T>(Action<T> action) where T 
           : class, ICommunicationObject, new()
    {
        var client = new T();

        try
        {
            action(client);
            client.Close();
        }
        finally
        {
            if (client.State == CommunicationState.Opened)
            {
                try
                {
                    client.Close();
                }
                catch (CommunicationObjectFaultedException)
                {
                    client.Abort();
                }
                catch (TimeoutException)
                {
                    client.Abort();
                }
            }
            if (client.State != CommunicationState.Closed)
            {
                client.Abort();
            }
        }
    }

Каждый вызов WCF должен создавать новый экземпляр вашего класса обслуживания. Этот код позволяет вам применять это и просто вызывать сервисы следующим образом:

CallService<MyService>( t => t.CallMyService());
0 голосов
/ 04 июня 2010

Скорее всего, вы не закрываете соединения. Вы должны обернуть все свои звонки в блоки Try / Catch / finally.

В C #:

ServiceClient service = GetService ();

        try
        {
            SomeRequest request = new SomeRequest();

            SomeResponse response = service.GetSome(request);

            return response.Result;
        }
        catch (Exception ex)
        {
            // do some error handling
        }
        finally
        {
            try
            {
                if (service.State != CommunicationState.Faulted)
                {
                    service.Close();
                }
            }
            catch (Exception ex)
            {
                service.Abort();
            }
        }

или VB

        Dim service As ServiceClient = GetService()

        Try
            Dim request As New SomeRequest()

            Dim response As SomeResponse = service.GetSome(request)

            Return response.Result
        Catch ex As Exception
            ' do some error handling
        Finally
            Try
                If service.State <> CommunicationState.Faulted Then
                    service.Close()
                End If
            Catch ex As Exception
                service.Abort()
            End Try
        End Try
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...