我是WCF的新手。我以前编写过ajax来使用Web服务,但是在这个项目中我试图将ajax用于WCF。
在我使用ajax构建项目和wcf后,我成功收到了返回。但是,10分钟或更长时间后我没有得到返回,ajax调用错误函数,而fiddler什么都不返回。
如果我在没有任何源修改的情况下重建项目,我会再次成功收到返回。
他们是否经历过这种情况或者知道为什么会这样?
谢谢。
答案 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());