我正在使用这样的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 :(得分: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。