#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. Просто чтобы поддержать вашу гипотезу, я попробовал это в той же конфигурации, и все сработало.