Пытаюсь вызвать службу WCF из обработчика сообщений NServiceBus, но она зависает при создании клиента-службы

#nservicebus

#nservicebus

Вопрос:

Должно быть, здесь происходит что-то ужасно неправильное. Вот что я пытаюсь сделать.

У меня есть обработчик сообщений, который должен получить сообщение из очереди. Выполните вызов WCF, выполните какие-то действия и, когда закончите, отправьте новое сообщение по шине. Она размещена в NServiceBus.Host.Exe.

Но всякий раз, когда я создаю клиент службы, все останавливается. Если я закомментирую вызов службы, все работает отлично… Кроме того, мне нужен этот вызов.

Есть ли трюк, который я должен сделать, чтобы выполнять вызовы WCF из моего обработчика сообщений при размещении его в NServiceBus.Host.Exe ? Я не создавал никакой специальной конфигурации в классе EndPointConfig.

  public class EndpointConfig : 
                IConfigureThisEndpoint, AsA_Server { }


 public class RequestAccountUpdateMessageHandler : IHandleMessages<RequestAccountUpdateMessage>
{
    public void Handle(RequestAccountUpdateMessage message)
    {
        // The Line below hangs everything
        AccountService.AccountServiceClient client = 
           new AccountService.AccountServiceClient();

        resp = client.DoStuff(message.parameter);


         Bus.Send<UpdateAccountMessage>(m =>
         {
                m.info = DoMagicStuffHere(resp);
         });
     }
...
}
  

Вот как выглядит system.ServiceModel в App.Config

 <system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IAccountService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="false">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
                    <message clientCredentialType="UserName" algorithmSuite="Default"/>
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://yadayafa/accountservice.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IAccountService" contract="AccountService.IAccountService" name="BasicHttpBinding_IAccountService"/>
    </client>
    </system.serviceModel>
  

Комментарии:

1. Какую версию вы используете? Я только что запустил это на NSB 2.5 без проблем.

2. Visual Studio 2010, 3.5 framework, NSB 2.5, Win7.

3. Обновление: Я взял образец PubSub и добавил строку кода в обработчик для создания клиента. Дома это работает хорошо, на компьютере в офисе это зависает :-(… Должно быть, это какая-то конфигурация на моем рабочем компьютере, которая сглазила установку клиента WCF внутри NServiceBus.Host.Exe

4. Просто чтобы поддержать вашу гипотезу, я попробовал это в той же конфигурации, и все сработало.