Как правильно открыть сервис WCF - PullRequest
1 голос
/ 25 января 2010

Я использую клиент 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 ]

1 голос
/ 25 января 2010

Я бы предложил:

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 голосов
/ 25 января 2010

Используйте это, чтобы включить ведение журнала трассировки в сервисе

  <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 также может помочь, просто пытаясь захватить WSDL через веб-браузер в течение этих 15 минут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...