Я пытался настроить NServiceBus в WebApp с функцией DataBus, но безрезультатно. Это то, что я имею в плане конфигурации шины,
_containerProvider.Register(Component.For<IProducer>()
.UsingFactoryMethod(() => new NServiceBusProducer(() => Configure
.WithWeb()
.DefaultBuilder()
//.AsMasterNode()
.Log4Net()
.MsmqTransport()
.IsTransactional(false) // ??
.PurgeOnStartup(false)
.UnicastBus()
.DefiningMessagesAs(t => t.Namespace != null && t.Namespace == "Magma.CommunicationBus.Messages")
.JsonSerializer()
.FileShareDataBus(@"..\..\..\abc")
//.CreateBus()
//.Start()))
.SendOnly()))
.LifestyleSingleton());
Я не знаю, если это проблема с разрешениями, когда NServiceBus создает папку хранилища, но я даже не вижу, что DataBus инициализируется. На стороне «прослушивания» я могу видеть это с этой строкой в выводе:
- Запущена шина обмена файлами. Расположение: ...
Но я не вижу этого в выходных данных WebApp. Кроме того, когда NServiceBus инициализируется, я вижу (снова в выходных данных) список мутаторов, которые использует шина. И снова нет никаких следов «DataBusMessageMutator»
К вашему сведению, я использую это для отправки вложений электронной почты. Вот как я это делаю:
message.Attachements = new DataBusProperty<byte[]>(email.Attachments.Select(a =>
{
using (MemoryStream ms = new MemoryStream())
{
a.ContentStream.CopyTo(ms);
return ms.ToArray();
}
}).First());
Я пытаюсь использовать только 1, но я планирую отправить список вложений.
Я не могу заставить это работать на стороне отправки. Конечно, он падает на стороне «прослушивания» где-то в коде NServiceBus, когда мутатор пытается получить несуществующий заголовок, чтобы создать путь к файлу «вещи», которую он будет читать. Сбой в методе «Get» класса «FileShareDataBus», так как параметр «key» в вызове «Path.Combine» имеет значение null.
Что я делаю неправильно или отсутствует?