Bug on Visual Studio 2017

On visual studio 2017, Win10, in a new relativity client project

datamodule -> right click “remoteDataAdapter” (LinqRemoteDataAdapter) -> Reset Calls To Defaults

This action add new parameters without deleting old ones in:

remoteDataAdapter -> DataRequestCall -> Parameters
remoteDataAdapter -> DataUpdateCall-> Parameters
remoteDataAdapter -> SchemaCall-> Parameters

When deleting manually this parameters from ide, in DataModule.Designer.cs some lines code remains.

Hello

What language do you use in the project where you see this issue?

C#.

I have found this also in client/server application, after changing ClientChannel.targetUrl to another IP.

WinFormsApplication27.zip (140.6 KB)

I was not able to reproduce any issues on the latest VS 2017 and RO SDK build.

This issue happen often.

You can reproduce it:

  1. create a new DA client/custom server application

  2. open DataModule, select channel, change TargetUrl (visual property)

  3. if you open DataModule.Designer.cs you can see:

     #region Component Designer generated code
    
     /// <summary>
     /// Required method for Designer support - do not modify
     /// the contents of this method with the code editor.
     /// </summary>
     private void InitializeComponent()
     {
         this.components = new System.ComponentModel.Container();
         RemObjects.SDK.DynamicRequestParameter dynamicRequestParameter1 = new RemObjects.SDK.DynamicRequestParameter();
         RemObjects.SDK.DynamicRequestParameter dynamicRequestParameter2 = new RemObjects.SDK.DynamicRequestParameter();
         RemObjects.SDK.DynamicRequestParameter dynamicRequestParameter3 = new RemObjects.SDK.DynamicRequestParameter();
         RemObjects.SDK.DynamicRequestParameter dynamicRequestParameter4 = new RemObjects.SDK.DynamicRequestParameter();
         RemObjects.SDK.DynamicRequestParameter dynamicRequestParameter5 = new RemObjects.SDK.DynamicRequestParameter();
         RemObjects.SDK.DynamicRequestParameter dynamicRequestParameter6 = new RemObjects.SDK.DynamicRequestParameter();
         RemObjects.SDK.DynamicRequestParameter dynamicRequestParameter7 = new RemObjects.SDK.DynamicRequestParameter();
         this.message = new RemObjects.SDK.BinMessage();
         this.encryptionEnvelope = new RemObjects.SDK.AesEncryptionEnvelope();
         this.remoteService = new RemObjects.SDK.RemoteService(this.components);
         this.ipHttpClientChannel1 = new RemObjects.SDK.IpHttpClientChannel();
         this.dataStreamer = new RemObjects.DataAbstract.Bin2DataStreamer(this.components);
         this.remoteDataAdapter = new RemObjects.DataAbstract.Linq.LinqRemoteDataAdapter(this.components);
         this.ecmaScriptProvider = new RemObjects.DataAbstract.Scripting.EcmaScriptProvider();
         ((System.ComponentModel.ISupportInitialize)(this.remoteDataAdapter)).BeginInit();
         // 
         // message
         // 
         this.message.ContentType = "application/octet-stream";
         this.message.SerializerInstance = null;
         // 
         // encryptionEnvelope
         // 
         this.encryptionEnvelope.EnvelopeMarker = "AES";
         this.encryptionEnvelope.Password = "xxx";
         // 
         // remoteService
         // 
         this.remoteService.Channel = this.ipHttpClientChannel1;
         this.remoteService.CloneMessage = true;
         this.remoteService.Message = this.message;
         this.remoteService.ServiceName = "DataService";
         // 
         // ipHttpClientChannel1
         // 
         this.ipHttpClientChannel1.Password = "";
         this.ipHttpClientChannel1.SslOptions.Certificate = null;
         this.ipHttpClientChannel1.SslOptions.TargetHostName = null;
         this.ipHttpClientChannel1.TargetUrl = "http://xxx:8099/bin";
         this.ipHttpClientChannel1.Timeout = 10;
         this.ipHttpClientChannel1.TimeoutEnabled = false;
         this.ipHttpClientChannel1.UserName = "";
         this.ipHttpClientChannel1.OnLoginNeeded += new System.EventHandler<RemObjects.SDK.LoginNeededEventArgs>(this.ClientChannel_OnLoginNeeded);
         this.ipHttpClientChannel1.OnException += new System.EventHandler<RemObjects.SDK.RequestExceptionEventArgs>(this.ipHttpClientChannel1_OnException);
         // 
         // dataStreamer
         // 
         this.dataStreamer.SendReducedDelta = false;
         // 
         // remoteDataAdapter
         // 
         // 
         // 
         // 
         this.remoteDataAdapter.DataRequestCall.IncomingDataParameter = "Result";
         this.remoteDataAdapter.DataRequestCall.MethodName = "GetData";
         this.remoteDataAdapter.DataRequestCall.OutgoingTableNamesParameter = "aTableNameArray";
         dynamicRequestParameter1.DataTypeName = "StringArray";
         dynamicRequestParameter1.Direction = RemObjects.SDK.ParameterDirection.In;
         dynamicRequestParameter1.Name = "aTableNameArray";
         dynamicRequestParameter1.Value = null;
         dynamicRequestParameter2.DataTypeName = "TableRequestInfoArray";
         dynamicRequestParameter2.Direction = RemObjects.SDK.ParameterDirection.In;
         dynamicRequestParameter2.Name = "aTableRequestInfoArray";
         dynamicRequestParameter2.Value = null;
         dynamicRequestParameter3.DataTypeName = "Binary";
         dynamicRequestParameter3.Direction = RemObjects.SDK.ParameterDirection.Result;
         dynamicRequestParameter3.Name = "Result";
         dynamicRequestParameter3.Value = null;
         this.remoteDataAdapter.DataRequestCall.Parameters.Add(dynamicRequestParameter1);
         this.remoteDataAdapter.DataRequestCall.Parameters.Add(dynamicRequestParameter2);
         this.remoteDataAdapter.DataRequestCall.Parameters.Add(dynamicRequestParameter3);
         this.remoteDataAdapter.DataRequestCall.RemoteService = this.remoteService;
         this.remoteDataAdapter.DataStreamer = this.dataStreamer;
         // 
         // 
         // 
         this.remoteDataAdapter.DataUpdateCall.IncomingDeltaParameter = "Result";
         this.remoteDataAdapter.DataUpdateCall.MethodName = "UpdateData";
         this.remoteDataAdapter.DataUpdateCall.OutgoingDeltaParameter = "aDelta";
         dynamicRequestParameter4.DataTypeName = "Binary";
         dynamicRequestParameter4.Direction = RemObjects.SDK.ParameterDirection.In;
         dynamicRequestParameter4.Name = "aDelta";
         dynamicRequestParameter4.Value = null;
         dynamicRequestParameter5.DataTypeName = "Binary";
         dynamicRequestParameter5.Direction = RemObjects.SDK.ParameterDirection.Result;
         dynamicRequestParameter5.Name = "Result";
         dynamicRequestParameter5.Value = null;
         this.remoteDataAdapter.DataUpdateCall.Parameters.Add(dynamicRequestParameter4);
         this.remoteDataAdapter.DataUpdateCall.Parameters.Add(dynamicRequestParameter5);
         this.remoteDataAdapter.DataUpdateCall.RemoteService = this.remoteService;
         this.remoteDataAdapter.LoginString = null;
         this.remoteDataAdapter.Password = null;
         this.remoteDataAdapter.RemoteService = this.remoteService;
         // 
         // 
         // 
         this.remoteDataAdapter.SchemaCall.IncomingSchemaParameter = "Result";
         this.remoteDataAdapter.SchemaCall.MethodName = "GetSchema";
         this.remoteDataAdapter.SchemaCall.OutgoingFilterParameter = "aFilter";
         dynamicRequestParameter6.DataTypeName = "String";
         dynamicRequestParameter6.Direction = RemObjects.SDK.ParameterDirection.In;
         dynamicRequestParameter6.Name = "aFilter";
         dynamicRequestParameter6.Value = null;
         dynamicRequestParameter7.DataTypeName = "String";
         dynamicRequestParameter7.Direction = RemObjects.SDK.ParameterDirection.Result;
         dynamicRequestParameter7.Name = "Result";
         dynamicRequestParameter7.Value = null;
         this.remoteDataAdapter.SchemaCall.Parameters.Add(dynamicRequestParameter6);
         this.remoteDataAdapter.SchemaCall.Parameters.Add(dynamicRequestParameter7);
         this.remoteDataAdapter.SchemaCall.RemoteService = this.remoteService;
         this.remoteDataAdapter.ScriptProvider = this.ecmaScriptProvider;
         this.remoteDataAdapter.TargetUrl = null;
         this.remoteDataAdapter.UseDynamicWhere = false;
         this.remoteDataAdapter.UserName = null;
         // 
         // ecmaScriptProvider
         // 
         this.ecmaScriptProvider.Context = null;
         this.ecmaScriptProvider.DebugMode = RemObjects.DataAbstract.ScriptDebugMode.None;
         ((System.ComponentModel.ISupportInitialize)(this.remoteDataAdapter)).EndInit();
    
     }
    
     #endregion
    

For make the project work again i must delete mannually all code relative of duplicated dynamicRequestParameter.

What exactly doesn’t work for you? I don’t see any duplicated parameters here.

Also reproduce steps are not full because none of our generated projects contain name like ipHttpClientChannel1.

This is the exception in client project.

Si è verificata l'eccezione RemObjects.SDK.Exceptions.SessionNotFoundException
  HResult=0x80131500
  Messaggio=An exception occurred on the server: Session could not be found.
  Origine=<Non è possibile valutare l'origine dell'eccezione>
  Analisi dello stack:
   in RemObjects.SDK.Message.ProcessException()
   in RemObjects.SDK.BinMessage.InternalReadFromStream(Stream stream)
   in RemObjects.SDK.Message.ReadFromStream(Stream stream)
   in RemObjects.SDK.IpHttpClientChannel.IntDispatch(Stream request, IMessage response)
   in RemObjects.SDK.ClientChannel.Dispatch(IMessage message)
   in RemObjects.SDK.DynamicRequest.InternalMakeRequest()
   in RemObjects.SDK.DynamicRequest.MakeRequest()
   in RemObjects.DataAbstract.Linq.LinqRemoteDataAdapter.FetchData(TableRequestInfo[] tableRequest, String[] tableNames, Action`3 fillMethod)
   in RemObjects.DataAbstract.Linq.RemoteTable`1.Execute(Expression expression, DataParameter[] parameters)
   in RemObjects.DataAbstract.Linq.RemoteTable`1.Execute(Expression expression)
   in RemObjects.DataAbstract.Linq.RemoteTableQuery`1.GetEnumerator()
   in System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   in System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   in WinFormsApplication36.MainForm.MainForm_Load(Object sender, EventArgs e) in C:\Users\Davide\Documents\Visual Studio 2017\Projects\WinFormsApplication36\WinFormsApplication36Error\MainForm.cs: riga 25
   in System.Windows.Forms.Form.OnLoad(EventArgs e)
   in System.Windows.Forms.Form.OnCreateControl()
   in System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   in System.Windows.Forms.Control.CreateControl()
   in System.Windows.Forms.Control.WmShowWindow(Message& m)
   in System.Windows.Forms.Control.WndProc(Message& m)
   in System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   in System.Windows.Forms.Form.WmShowWindow(Message& m)
   in System.Windows.Forms.Form.WndProc(Message& m)
   in System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   in System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   in System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

In attachment a simple NET solution with:

  • custom server
  • custom client
  • copy of custom client with the error (this is the same project, the only change i have done is to modify channel targeturl from localhost to 127.0.0.1)

This is a sample to reproduce this error, but it will occour also in other way, randomly in project when i update entities or configuration.

WinFormsApplication36_RemobjectTalkSample.zip (6.0 MB)

Thanks for the testcase. IT seems like a some kind on WinForms designer bug in VS 2017. We’’ need to investigate this deeper.

Please reattach the OnLoginNeeded event handler to the client channel and this exception will be resolved. It means that one tries to access data w/o loggin in first.

Thanks, logged as bugs://79015

bugs://79015 got closed with status nochangereq.