使用WCF工作的ajax。但很少有迷你之后,不起作用

时间:2010-05-11 13:11:34

标签: asp.net ajax wcf

我是WCF的新手。我以前编写过ajax来使用Web服务,但是在这个项目中我试图将ajax用于WCF。

在我使用ajax构建项目和wcf后,我成功收到了返回。但是,10分钟或更长时间后我没有得到返回,ajax调用错误函数,而fiddler什么都不返回。

如果我在没有任何源修改的情况下重建项目,我会再次成功收到返回。

他们是否经历过这种情况或者知道为什么会这样?

谢谢。

2 个答案:

答案 0 :(得分:0)

很可能你没有关闭连接。您应该将所有调用都包装在Try / Catch / Finally块中。

在C#中:

ServiceClient服务= 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

答案 1 :(得分:0)

以下是调用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());