Developing a strong named library in C# that meets ComVisibility requirements

I have been trying to develop a library (DLL) in Visual Studio 2008 and C# that could be used by a PowerBuilder application that we have in-house at our organization. I've developed a simple library just to test the concept. I've successfully compiled the library, including checking "Sign the Assembly" with a strong name key file in the project properties. I then registered the assembly with the GAC utility (gacutil), and that was successful, too.

Now, when I attempt to use the assembly in a test app (also .NET), I get the following error:

"Invalid ServicedComponent-derived classes were found in the assembly.
(Classes must be public, concrete, have a public default constructor, and meet all other ComVisibility requirements)"

I've attached the entire code for the class library, but I can't figure out what about it doesn't meet ComVisibility requirements. It has a default constructor, it all the required methods and properties are public. What's missing?
using System;
using System.Collections.Generic;
using System.EnterpriseServices;
using System.Linq;
using System.Text;
[assembly: Description("Sample DLL application to test the viability of using a DLL CrewManager Interface")]
 
namespace NIIPCrewManager
{
    [Transaction(TransactionOption.RequiresNew)]
    public class CMJob : ServicedComponent
    {
        private string m_WorkRequestNumber = string.Empty;
        private string m_CrewManagerNumber = string.Empty;
 
        #region Constructors
        /// <summary>
        /// Constructor of this class without arguments.
        /// </summary>
        public CMJob()
        {
        }
 
        /// <summary>
        /// Constructor of this class with arguments.
        /// </summary>
        public CMJob(string p_WorkRequestNumber)
        {
            m_WorkRequestNumber = p_WorkRequestNumber;
        }
        #endregion
 
        #region PUBLIC PROPERTIES
 
        /// <summary>
        /// Gets / Sets the NIIP Work Request for the job.
        /// </summary>
        public string WorkRequestNumber
        {
            get { return m_WorkRequestNumber; }
            set { m_WorkRequestNumber = value; }
        }
 
        /// <summary>
        /// Gets / Sets the CrewManager Job Number for the job.
        /// </summary>
        public string CrewManagerNumber
        {
            get { return m_CrewManagerNumber; }
            set { m_CrewManagerNumber = value; }
        }
 
        #endregion
 
        #region PUBLIC METHODS
 
        /// <summary>
        /// Creates the CrewManager Job and returns the CrewManager Job Number.
        /// </summary>
        public string CreateCrewManagerJob()
        {
            CrewManagerNumber = "TST1234";
 
            return CrewManagerNumber;
        }
 
        /// <summary>
        /// Creates the CrewManager Job and returns the CrewManager Job Number.
        /// </summary>
        public string CreateCrewManagerJob(string p_WorkRequestNumber)
        {
            WorkRequestNumber = p_WorkRequestNumber;
            CrewManagerNumber = "TST1234";
 
            return CrewManagerNumber;
        }
 
        #endregion
 
    }
}

Open in new window

DanielBorsonAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
elimesikaConnect With a Mentor Commented:
HI

Do the following

1) remove the class constructor that has a parameter (it should have just the default empty constructor)

2) Compile your project

3) in your test application , create the object , use the object property to set the value of WorkRequestNumber

You are not being able to call a constructor that has your parameters, but it's the price you pay to implement the ServicedComponent model.
0
 
DanielBorsonAuthor Commented:
Thanks. We ended up re-doing this as a web service, but your answer makes perfect sense.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.