如何正确打开WCF服务

时间:2010-01-25 14:55:37

标签: wcf

我正在使用这样的WCF客户端......

var client = new TestClient();
try
{    
    response = service.Operation(request);
}
finally
{    
    try
    {
        if (client.State != CommunicationState.Faulted)
            client.Close();
    }
    catch (Exception)
    {
        client.Abort();
    }
}

但是我不时会得到500个HTTP错误,这是我接下来15分钟得到的唯一答案,然后一切都恢复正常15分钟,依此类推。我知道在服务方面有一些负载平衡的东西,但那里的人不会发现任何问题。

这就是为什么我开始想知道我是否正确使用WCF服务。当我使用“使用”来关闭服务连接时,我已经犯了一个错误,我害怕我再次做错了。

那么有人可以说我的调用WCF服务的方式是否正确(事件是最罕见的)情况?

2 个答案:

答案 0 :(得分:1)

我建议:

var client = new TestClient();
try
{    
    response = client.Operation(request);
    client.Close();
}
catch
{
    client.Abort();
}

你正在做的事情,如果出现问题你不会中止,因为你的捕获在finally块内。如果您想使用今天的代码,我认为您需要将其更改为:

var client = new TestClient();
try
{    
    response = client.Operation(request);
}
finally
{    
    try
    {
        if (client.State != CommunicationState.Faulted)
            client.Close();
        else
            client.Abort(); // Abort if the State is Faulted.
    }
    catch (Exception)
    {
        client.Abort();
    }
}

答案 1 :(得分:0)

使用此选项启用服务上的跟踪日志记录

  <system.diagnostics>
      <sources>
            <source name="System.ServiceModel" 
                    switchValue="Information, ActivityTracing"
                    propagateActivity="true">
            <listeners>
               <add name="traceListener" 
                   type="System.Diagnostics.XmlWriterTraceListener" 
                   initializeData= "c:\logs\Traces.svclog" />
            </listeners>
         </source>
      </sources>
   </system.diagnostics>

Fiddler也可以提供帮助,也只是尝试在15分钟内通过网络浏览器获取WSDL。