2010-01-25 43 views
1

我正在使用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服务的方式是否正确,不是在所有(事件中最罕见的)情况下?

+0

你是否检查catch块中的异常? – 2010-01-25 15:19:42

+0

异常被“接收到的HTML /文本,而不是XML /文本”。但是这是因为IIS返回了“服务错误500”页面。 – 2010-01-26 11:40:29

回答

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(); 
    } 
} 
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> 

菲德勒还可以帮助启用跟踪日志记录,也只是想抓住这些15分钟时通过Web浏览器的WSDL。