I've created a new organization on CRM 2015 and everything went dandy. Then, I attempted to create an additional one on the server and got the error listed below.
What on Earth are "neglected cases" in a new organization?
16:10:44| Error| System.Exception: Publishing CRM reports failed. ---> Microsoft.Crm.CrmException: Could not publish report 'Neglected Cases' due to the following error: An error occurred while trying to add the report to Microsoft Dynamics CRM. Try adding the report again. If this problem persists, contact your system administrator. ---> Microsoft.Crm.CrmReportingException: An error occurred while trying to add the report to Microsoft Dynamics CRM. Try adding the report again. If this problem persists, contact your system administrator. ---> System.Web.Services.Protocols.SoapException: Error while loading code module: ‘Microsoft.Crm.Reporting.RdlHelper, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’. Details: Could not load file or assembly 'Microsoft.Crm.Reporting.RdlHelper, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at Microsoft.Crm.ReportingServices2005.ReportingService2005.CreateReport(String Report, String Parent, Boolean Overwrite, Byte[] Definition, Property[] Properties)
at Microsoft.Crm.Reporting.RuntimeReportServer.UploadReport(String path, Byte[] reportDefinition, String name, String description, Boolean overwriteExistingReport)
--- End of inner exception stack trace ---
at Microsoft.Crm.Reporting.RuntimeReportServer.UploadReport(String path, Byte[] reportDefinition, String name, String description, Boolean overwriteExistingReport)
at Microsoft.Crm.Reporting.RuntimeReportServer.UploadReport(SRSReport report, String reportNameOnSrs, String name, String description, Boolean isSharedReport, Boolean overwriteExistingReport)
at Microsoft.Crm.ObjectModel.ReportServiceInternal1.UploadSRSReport(Guid reportId, String reportNameOnSrs, String name, String description, SRSReport srsReport, ExecutionContext context, Boolean isCustomReport, Boolean overwriteExistingReport)
at Microsoft.Crm.ObjectModel.ReportServiceInternal1.CreateInternal(IBusinessEntity entity, Boolean isScheduledReport, ExecutionContext context)
at Microsoft.Crm.Reporting.ReportPublisher.UploadReportInternal(IBusinessEntity report, Int32[] relatedEntitiesArray, Int32[] categoriesArray, Int32[] visibilitiesArray, Guid organizationId, Boolean isProvisioning)
at Microsoft.Crm.Reporting.ReportSetupPublisher.UploadReportInternal(IBusinessEntity report, Int32[] relatedEntitiesArray, Int32[] categoriesArray, Int32[] visibilitiesArray, Guid organizationId, Boolean isProvisioning)
at Microsoft.Crm.Reporting.ReportPublisher.UploadReport(String reportFolder, String reportName, String fileName, String description, Int32 languageCode, Int32[] categoriesArray, Int32[] relatedEntitiesArray, Int32[] visibilitiesArray, Object parentId, Guid signatureId, Version version, Guid organizationId, Hashtable reportsPublished, String reportNameOnSrs, Boolean isProvisioning)
at Microsoft.Crm.Reporting.ReportPublisher.UploadReports(Guid organizationId, String reportFolder, Int32 languageCode, Int32 matchCategoryNumber, Int32 addCategoryNumber, IProgressEventSource progress, Boolean isProvisioning)
--- End of inner exception stack trace ---
at Microsoft.Crm.Reporting.ReportSetupPublisher.OnPublishFail(Exception exception, String message)
at Microsoft.Crm.Reporting.ReportPublisher.UploadReports(Guid organizationId, String reportFolder, Int32 languageCode, Int32 matchCategoryNumber, Int32 addCategoryNumber, IProgressEventSource progress, Boolean isProvisioning)
at Microsoft.Crm.Setup.Server.Utility.ReportsUtility.UploadReports(String orgUniqueName, String reportFolder, Int32 languageCode, Int32 matchCategoryNumber, Int32 addCategoryNumber, IProgressEventSource progress)
at Microsoft.Crm.Tools.Admin.RSPublishAction.PublishReports(String organizationUniqueName)
at Microsoft.Crm.Tools.Admin.RSPublishAction.Do()
at Microsoft.Crm.Setup.Shared.CrmAction.ExecuteAction(CrmAction action, IDictionary parameters, Boolean undo)
--- End of inner exception stack trace ---, Error, AbortRetryIgnore, Option1
16:10:51| Info| InputResult: Ignore
16:10:51| Info| CrmAction execution time; RSPublishAction; 00:00:34.6283317
16:10:51| Error| Installer Complete: OrganizationCreator - Error encountered
16:10:51| Info| Setting organization state. New state = Enabled
16:10:51| Info| Found the older table DBUpdateInstallInfo_V5, updating new table and deleting
16:10:51| Info| GetDBUpdateRevisionThresholdForServer(): Threshold = 7.0.0000.3543.
Neglected Cases is the name of a standard report that is published when you are creating a new organization (this report shows cases that have not been processed within a given time).
When you create a new CRM organization, the standard reports are published. The interesting detail about your error is this line:
Could not load file or assembly 'Microsoft.Crm.Reporting.RdlHelper'
It seems to me your installation is corrupt. Did you install the "Microsoft Dynamics CRM Reporting Extensions" on the SQL/Reporting server?
Related
I use ABP 5.1.0
.Net Core,
I have my class
ItemAsyncEventBaseHandler : IAsyncEventHandler<TEvent>, ITransientDependency
where TEvent : EventData {…}
Then i have class:
CustomHandler: ItemAsyncEventBaseHandler<EventData>
{
public CustomHandler(
IUnitOfWorkManager unitOfWorkManager,
ISettingManager settingManager)
{
_unitOfWorkManager = unitOfWorkManager;
_settingManager = settingManager;
}
}
public override async Task HandleInternallyAsync(ItemUpdatedEvent eventData)
{
await _settingManager.ChangeSettingForApplicationAsync("key", value.ToString());
}
At first glance, this works, but if I run the handler on two different items in quick succession, I get an error:
(On some machines it is enough to run the event on two items, on others it is necessary to run the event on the other two items in order for the same error to occur.)
System.ObjectDisposedException: Cannot access a disposed object. A common cause of this error is disposing a context that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. This may occur if you are calling Dispose() on the context, or wrapping the context in a using statement. If you are using dependency injection, you should let the dependency injection container take care of disposing context instances.
Object name: 'MyDbContext'.
at Microsoft.EntityFrameworkCore.DbContext.CheckDisposed()
at Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies()
at Microsoft.EntityFrameworkCore.DbContext.Set[TEntity]()
at Abp.EntityFrameworkCore.Repositories.EfCoreRepositoryBase`3.GetQueryable()
at Abp.EntityFrameworkCore.Repositories.EfCoreRepositoryBase`3.GetAllIncluding(Expression`1[] propertySelectors)
at Abp.EntityFrameworkCore.Repositories.EfCoreRepositoryBase`3.FirstOrDefaultAsync(Expression`1 predicate)
at Abp.Threading.InternalAsyncHelper.AwaitTaskWithPostActionAndFinallyAndGetResult[T](Task`1 actualReturnValue, Func`1 postAction, Action`1 finalAction)
at Abp.Configuration.SettingStore.GetSettingOrNullAsync(Nullable`1 tenantId, Nullable`1 userId, String name)
at Abp.Threading.InternalAsyncHelper.AwaitTaskWithPostActionAndFinallyAndGetResult[T](Task`1 actualReturnValue, Func`1 postAction, Action`1 finalAction)
at Abp.Configuration.SettingManager.InsertOrUpdateOrDeleteSettingValueAsync(String name, String value, Nullable`1 tenantId, Nullable`1 userId)
at Abp.Configuration.SettingManager.ChangeSettingForApplicationAsync(String name, String value)
at Abp.Threading.InternalAsyncHelper.AwaitTaskWithPostActionAndFinally(Task actualReturnValue, Func`1 postAction, Action`1 finalAction)
at Nito.AsyncEx.Synchronous.TaskExtensions.WaitAndUnwrapException(Task task)
at Nito.AsyncEx.AsyncContext.<>c__DisplayClass15_0.<Run>b__0(Task t)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location where exception was thrown ---
at Nito.AsyncEx.Synchronous.TaskExtensions.WaitAndUnwrapException(Task task)
at Nito.AsyncEx.AsyncContext.Run(Func`1 action)
And the value in the application settings is not updated.
I tried wrapping in uow but it doesn't help:
public override async Task HandleInternallyAsync(ItemUpdatedEvent eventData)
{
using (var uow = _unitOfWorkManager.Begin(TransactionScopeOption.RequiresNew))
{
await _settingManager.ChangeSettingForApplicationAsync("key", value.ToString());
await uow.CompleteAsync();
}
}
I am trying to get the email account associated with some shared mailbox whose email is sent as a parameter. The followed code works fine when I execute it on Outlook 2013. However, it throws a System.InvalidCastException on Outlook 2016.
public string GetUserSMTPAddressOfSharedMailbox(string email)
{
Redemption.IRDOStore store = RdoSession.GetSharedMailbox(email);
if(store != null && store.StoreAccount != null)
{
return store.StoreAccount.CurrentUser.SMTPAddress;
}
return null;
}
System.InvalidCastException: Unable to cast
COM object of type 'System.__ComObject' to interface type
'Redemption.IRDOSession'. This operation failed because the
QueryInterface call on the COM component for the interface with IID
'{E54C5168-AA8C-405F-9C14-A4037302BD9D}' failed due to the following
error: No such interface
supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
at System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr
pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease)
at Redemption.IRDOSession.GetSharedMailbox(Object NameOrAddressOrObject)
I'm following the tutorial on how to build a console application that connects to Dynamics CRM, but stuck on the very beginning with using the CrmSvcUtil.
here's what I did:
copied this command:
CrmSvcUtil.exe /codeCustomization:"Microsoft.Xrm.Client.CodeGeneration.CodeCustomization, Microsoft.Xrm.Client.CodeGeneration" /out:Xrm.cs /url:https://<mydomain>.api.crm.dynamics.com/XRMServices/2011/Organization.svc /username:<myusername>#<mydomain>.onmicrosoft.com /password:<mypassword> /namespace:Xrm /serviceContextName:XrmServiceContext
replaced the above /url with the one listed on my CRM online deployment under Settings > Customizations > Developer Resources > Organization Service.
replaced the above /username with my onmicrosoft.com username, and put quotes before and after it.
replaced the above /password the way I did with /username.
followed this note and put the Xrm.Client.CodeGeneration.dll on the same directory with CrmSvcUtil.exe.:
Note that the Microsoft.Xrm.Client.CodeGeneration.dll file must be in
the same directory as the CrmSvcUtil.exe file
and then I ran it, and got the following error:
CrmSvcUtil : CRM Service Utility [Version 8.1.0.7711]
c 2015 Microsoft Corporation. All rights reserved
Exiting program with exception: Could not load file or assembly 'CrmSvcUtil, Version=7.0.0.0, Cult
ure=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest
definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
CrmSvcUtil Error: 2 : Exiting program with exit code 2 due to exception : System.IO.FileLoadExcept
ion: Could not load file or assembly 'CrmSvcUtil, Version=7.0.0.0, Culture=neutral, PublicKeyToken
=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not
match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'CrmSvcUtil, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase
, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadType
FromPartialName, ObjectHandleOnStack type)
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase
, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromP
artialName)
at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolea
n reflectionOnly, StackCrawlMark& stackMark)
at System.Type.GetType(String typeName, Boolean throwOnError)
at Microsoft.Crm.Services.Utility.ServiceFactory.CreateInstance[TIService](TIService defaultSer
viceInstance, String parameterValue, CrmSvcUtilParameters parameters)
at Microsoft.Crm.Services.Utility.ServiceProvider.InitializeServices(CrmSvcUtilParameters param
eters)
at Microsoft.Crm.Services.Utility.CrmSvcUtil.get_ServiceProvider()
at Microsoft.Crm.Services.Utility.CrmSvcUtil.Run()
at Microsoft.Crm.Services.Utility.CrmSvcUtil.Main(String[] args)
WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!En
ableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
CrmSvcUtil Error: 2 : ===== DETAIL ======
CrmSvcUtil Error: 2 : Source : mscorlib
Method : GetTypeByName
Date : 15:52:37
Time : 28/10/2016
Error : Could not load file or assembly 'CrmSvcUtil, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
or one of its dependencies. The located assembly's manifest definition does
not match the assembly reference. (Exception from HRESULT: 0x80131040)
Stack Trace : at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean
ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder,
Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase,
Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
at System.Type.GetType(String typeName, Boolean throwOnError)
at Microsoft.Crm.Services.Utility.ServiceFactory.CreateInstance[TIService](TIService defaultServiceInstance, String parameterValue, CrmSvcUtilParameters parameters)
at Microsoft.Crm.Services.Utility.ServiceProvider.InitializeServices(CrmSvcUtilParameters parameters)
at Microsoft.Crm.Services.Utility.CrmSvcUtil.get_ServiceProvider()
at Microsoft.Crm.Services.Utility.CrmSvcUtil.Run()
at Microsoft.Crm.Services.Utility.CrmSvcUtil.Main(String[] args)
What's the way to solve it?
EDIT: I tried using Early Bound Generator - just downloading it, connecting, and clicking "Create Entities", but it ends with an error:
System.ArgumentException: An item with the same key has already been added.
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at DLaB.CrmSvcUtilExtensions.Entity.CodeWriterFilterService.GenerateOptionSet(OptionSetMetadataBase optionSetMetadata, IServiceProvider services)
at Microsoft.Crm.Services.Utility.CodeGenerationService.BuildAttributeOptionSet(EntityMetadata entity, AttributeMetadata attribute, CodeTypeMember attributeMember, ServiceProvider serviceProvider)
at Microsoft.Crm.Services.Utility.CodeGenerationService.BuildEntity(EntityMetadata entity, ServiceProvider serviceProvider)
at Microsoft.Crm.Services.Utility.CodeGenerationService.BuildEntities(EntityMetadata[] entityMetadata, ServiceProvider serviceProvider)
at Microsoft.Crm.Services.Utility.CodeGenerationService.BuildCodeDom(IOrganizationMetadata organizationMetadata, String outputNamespace, ServiceProvider serviceProvider)
at Microsoft.Crm.Services.Utility.CodeGenerationService.Microsoft.Crm.Services.Utility.ICodeGenerationService.Write(IOrganizationMetadata organizationMetadata, String language, String outputFile, String outputNamespace, IServiceProvider services)
at DLaB.CrmSvcUtilExtensions.BaseCustomCodeGenerationService.WriteInternal(IOrganizationMetadata organizationMetadata, String language, String outputFile, String targetNamespace, IServiceProvider services)
at DLaB.CrmSvcUtilExtensions.BaseCustomCodeGenerationService.Write(IOrganizationMetadata organizationMetadata, String language, String outputFile, String targetNamespace, IServiceProvider services)
Output file was not updated or not found!
You tagged your question as 'CRM 2016' and article that you linked is for CRM 2015. 'Xrm.Client.CodeGeneration.dll' is not present in SDK for CRM 2016. Copying this DLL from CRM 2015 SDK to bin directory of CRM 2016 SDK won't work and will result with error that you described, because this DLL depends on 7.0.0 versions not 8.0.0. You could try using CRM 2015 SDK (7.1.0) to generate CS file - it should work.
I am getting an error "Value does not fall within the expected range". The stacktrace is given below. Please help...
at MS.Internal.XcpImports.MethodEx(IntPtr ptr, String name, CValue[] cvData)
at MS.Internal.XcpImports.MethodPack(IntPtr objectPtr, String methodName, Object[] rawData)
at MS.Internal.XcpImports.UIElement_TransformToVisual(UIElement element, UIElement visual)
at Microsoft.Phone.Controls.Pivot.ReleaseMouseCaptureAtGestureOrigin()
at Microsoft.Phone.Controls.Pivot.OnManipulationDelta(Object sender, ManipulationDeltaEventArgs args)
at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)
Might be you are trying to access main thread object or UI thread object in a asynchronous function.because asynchronous function's thread has lower priority so you cant access the main thread object from here..
I am trying to set up a MassTransit request/response scenario. The issue is that the message never arrives at the consumer. I get a “timeout waiting for response” error on PublishRequest. No other errors are showing up in the log file. Messages are being created in msmq.
Exception information:
Exception type: TargetInvocationException
Exception message: Exception has been thrown by the target of an invocation. at System.RuntimeTypeHandle.CreateInstance(RuntimeType
type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached,
RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) at
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean
skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) at
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,
Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic) at
System.Activator.CreateInstance(Type type) at
System.Web.Mvc.DefaultControllerFactory.DefaultControllerActivator.Create(RequestContext
requestContext, Type controllerType)
Timeout waiting for response, RequestId:
08cfa243-4a88-ba3a-20cf-307f54910000 at
MassTransit.RequestResponse.RequestImpl1.Wait() in
d:\BuildAgent-03\work\8d1373c869590c5b\src\MassTransit\RequestResponse\RequestImpl.cs:line
124 at
MassTransit.RequestResponseExtensions.PublishRequest[TRequest](IServiceBus
bus, TRequest message, Action1 configureCallback) in
d:\BuildAgent-03\work\8d1373c869590c5b\src\MassTransit\RequestResponseExtensions.cs:line
31 at Producer.Website.Controllers.AccountController..ctor() in
c:\Users\rick\Documents\Visual Studio
2012\Projects\ConsumerTest1\Producer.Website\Controllers\AccountController.cs:line
56
Producer setup:
_bus = ServiceBusFactory.New(sbc =>
{
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
sbc.UseMulticastSubscriptionClient();
sbc.SetNetwork("Test");
sbc.ReceiveFrom("msmq://localhost/consumer_test_1");
});
Producer send message:
var message = new AccountNewMessage()
{
CorrelationId = CombGuid.Generate(),
UserName = “blah blah”,
Password = “yada yada”
};
this._bus.PublishRequest(message, r =>
{
r.SetTimeout(30.Seconds());
r.Handle<AccountNewMessageResponse>(m =>
{
var response = m;
});
});
Consumer setup:
this.bus = ServiceBusFactory.New(sbc =>
{
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
sbc.UseMulticastSubscriptionClient();
sbc.SetNetwork("Test");
sbc.ReceiveFrom("msmq://localhost/consumer_test_2");
sbc.Subscribe(subs => subs.Instance(new AccountNewMessageConsumer()));
});
Consumer:
public class AccountNewMessageConsumer : Consumes<AccountNewMessage>.Context
{
public void Consume(IConsumeContext<AccountNewMessage> context)
{
context.Respond(new AccountNewMessageResponse()
{
CorrelationId = context.Message.CorrelationId,
ErrorCode = "1",
UserId = new Random().Next(1, 10000).ToString()
});
}
}
Messages:
[Serializable]
public class AccountNewMessage : CorrelatedBy<Guid>
{
public Guid CorrelationId { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
[Serializable]
public class AccountNewMessageResponse : CorrelatedBy<Guid>
{
public Guid CorrelationId { get; set; }
public string UserId { get; set; }
public string ErrorCode { get; set; }
}
What am I doing wrong? Thank you.
You will have to tell MassTransit how to store it's subscription info (for MSMQ).
There are two choices: MSMQ Multicast, which keeps subscription information in memory, and MSMQ Runtime Services which stores the subscription information in a database, so it persists between sessions.
Your choice of which to use will depend on whether you require permanent or temporary subscriptions - from the docs:
Permanent subscriptions represent a subscription that you want to have
stay around even if your process is shut down (maybe you are doing an
upgrade and don’t want to miss a message). A temporary subscription is
to be used in the case where you won’t care if you miss a message
while shut down.
There's no reason you couldn't use Multicast during development / PoC and switch to RuntimeServices later. The docs page also shows how to set up each in configuration, of course with RuntimeServices you also have to set up a database.
(Note that Multicast can take a little while to set itself up, so you might need to give your test system a pause to warm up before you start pumping messages through it.)
Edit: I've appended a couple of routines which validate the subscriptions and consumers: you would call the first while setting up subscriptions (ie during sbc.Subscribe) and the second once the bus is configured. Perhaps they will help find the problem?
private void ValidateSubscriptions(Configurator configurator)
{
var errors = configurator.Validate();
Console.WriteLine("Subscription Validation");
Console.WriteLine("-----------------------");
foreach (var err in errors.Where(e => string.IsNullOrEmpty(e.Value) == false))
{
Console.WriteLine("Type: {0} Message: {1} Key: {2} Value: {3}",
err.Disposition, err.Message, err.Key, err.Value);
}
}
private static void ValidateBus(Configurator bus)
{
var errors = bus.Validate();
Console.WriteLine("Consumer Validation");
Console.WriteLine("-------------------");
foreach (var err in errors.Where(e => string.IsNullOrEmpty(e.Value) == false))
{
Console.WriteLine("Type: {0} Message: {1} Key: {2} Value: {3}",
err.Disposition, err.Message, err.Key, err.Value);
}
}