Время ожидания службы РИА WCF - PullRequest
3 голосов
/ 09 февраля 2010

У меня есть приложение, написанное на silverlight 3.0. Он использует службы RIA для связи между клиентом и сервером.

На мой вопрос, кажется, не очень хорошо отвечают в Интернете. Клиент связывается с сервером, используя службы RIA, которые используют WCF за кулисами. Если для сообщения требуется более 60 секунд, это время ожидания истекает с этим сообщением,

'Операция загрузки не выполнена для запроса' ApplyUpgrade '. Требование HTTP к 'http://localhost:52403/ClientBin/DatabaseUpgradeTool-Web-UpgradePackageDomainService.svc/binary' превысило выделенное время ожидания. Время, отведенное для этой операции, могло быть частью более длительного времени ожидания. '

Мой сервер выполняет обновление базы данных, поэтому допустимо, чтобы оно занимало более 60 секунд. Вероятно, вдвое или втрое больше.

Я попробовал такие настройки в web.config,

<services>
    <service name="DatabaseUpgradeTool.Web.UpgradePackageDomainService">
      <endpoint address="" binding="wsHttpBinding" contract="DatabaseUpgradeTool.Web.UpgradePackageDomainService"></endpoint>
      <endpoint address="/soap" binding="basicHttpBinding" contract="DatabaseUpgradeTool.Web.UpgradePackageDomainService"></endpoint>
      <endpoint address="/binary" binding="customBinding" bindingConfiguration="BinaryHttpBinding" contract="DatabaseUpgradeTool.Web.UpgradePackageDomainService"></endpoint>
    </service>
  </services>
<bindings>
    <customBinding>
      <binding name="BinaryHttpBinding"
               receiveTimeout="00:00:10"
               sendTimeout="00:00:10" 
               openTimeout="00:00:10" 
               closeTimeout="00:00:10">
        <binaryMessageEncoding   />
        <httpTransport keepAliveEnabled="true"/>
      </binding>
    </customBinding>
  </bindings>

Все еще нет радости. Любые идеи относительно того, что не так с тем, что я пробовал выше? Я ожидал бы, что вышеизложенное вызовет тайм-аут в течение 10 секунд, а не 60.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2012

Я столкнулся с той же проблемой, я отправил ответ на этот вопрос здесь: Проблема времени ожидания службы RIA Silverlight 4 WCF

Вот ответ:

Я объясню свой контекст и хочу, чтобы это сработало для меня. Я уверен в этом.

Прежде всего, чтобы вызвать службы RIA и использовать некоторый контекст домена, в моем примере:

EmployeeDomainContext context = new EmployeeDomainContext();
InvokeOperation<bool> invokeOperation = context.GenerateTMEAccessByEmployee(1, 'Bob');
invokeOperation.Completed += (s, x) =>
    {....};

Ничего нового, пока здесь. И с этим я сталкивался каждый раз с тем же самым исключением тайм-аута через 1 минуту. Я провожу довольно много времени, пытаясь понять, как изменить определение тайм-аута, я перепробовал все возможные изменения в Web.config и ничего. Решение было:

Создайте CustomEmployeeDomainContext, который является частичным классом , локализованным по тому же пути сгенерированного кода , и этот класс использует метод ловушки OnCreate для изменения поведения контекста созданного домена. В этом классе вы должны написать:

public partial class EmployeeDomainContext : DomainContext
{
    partial void OnCreated()
    {
        PropertyInfo channelFactoryProperty = this.DomainClient.GetType().GetProperty("ChannelFactory");
        if (channelFactoryProperty == null)
        {
            throw new InvalidOperationException(
              "There is no 'ChannelFactory' property on the DomainClient.");
        }

        ChannelFactory factory = (ChannelFactory)channelFactoryProperty.GetValue(this.DomainClient, null);

        factory.Endpoint.Binding.SendTimeout = new TimeSpan(0, 10, 0); 

    }
}

Я жду от вас отзывов.

0 голосов
/ 06 июля 2010

Не уверен, поможет ли это, я не пробовал его с настройками тайм-аута, но он может указывать вам правильное направление: http://blogs.objectsharp.com/CS/blogs/dan/archive/2010/04/13/maxitemsinobjectgraph-wcf-ria-services-exception.aspx

...