Я написал библиотеку классов, которая читает из XML-файла и возвращает результат в виде строки. Но когда я хочу установить его как компонент COM +, произошла ошибка (код ошибки: 80131501). Я проверил журнал событий и детали ошибки:
Установка 'C: \ Users \ User \ Documents \ Visual Studio 2005 \ Projects \ InteropSOA \ InteropSOA \ bin \ Debug \ InteropSOA.dll' в '{28E82165-AD74-4E16-90C9-0C5CE7DA97AA}' ошибка с исключением: System.EnterpriseServices.RegistrationException: FATAL: не удалось найти компонент InteropSOA.ConfigReader, который мы только что установили. в System.EnterpriseServices.RegistrationDriver.InstallAssembly (RegistrationConfig regConfig, Object obSync) в System.EnterpriseServices.RegistrationHelper.InstallAssemblyFromConfig (RegistrationConfig & regConfig) в System.EnterpriseServices. ) в System.EnterpriseServices.Internal.ComManagedImportUtil.InstallAssembly (строка asmpath, имя строки, имя приложения строки)
Ниже приведены шаги, которые я проделал при разработке библиотеки классов:
- Добавлен «System.EnterpriseServices» в справочник.
- Импортирована ссылка на класс.
- Объявлен класс как "ServicedComponent".
- Задать свойства проекта (проверено «Сделать сборку видимой для COM», проверено «Зарегистрироваться для взаимодействия с COM», Подписано сборка с именем файла строгого ключа.)
Вот мои коды:
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Xml.XPath;
using System.EnterpriseServices;
namespace InteropSOA
{
public class ConfigReader : ServicedComponent
{
// xml file name
private string strFileName;
// type of request
private string strRequest = "";
// response string
private string strResponse = "";
// declarations for xPath
private XPathDocument doc;
private XPathNavigator nav;
private XPathExpression expr;
private XPathNodeIterator iterator;
private XmlTextReader reader;
private XmlDocument xmlDoc;
public ConfigReader(string strFile, string request)
{
this.strFileName = strFile;
this.strRequest = request;
}
public ConfigReader()
{
//default contructor
}
// reader for console program
public void ReadXML()
{
doc = new XPathDocument(strFileName);
nav = doc.CreateNavigator();
// compile xPath expression
expr = nav.Compile("/Msg/" + strRequest + "/*");
iterator = nav.Select(expr);
// interate on the node set
try
{
while (iterator.MoveNext())
{
XPathNavigator nav2 = iterator.Current.Clone();
strResponse += nav2.Value + "|";
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
strResponse = strResponse.Substring(0, strResponse.Length-1);
Console.WriteLine("Response string = " + strResponse);
}
public void WriteXML(string strRequest, string strElement, string strValue)
{
reader = new XmlTextReader(strFileName);
xmlDoc = new XmlDocument();
xmlDoc.Load(reader);
reader.Close();
XmlNode node;
XmlElement root = xmlDoc.DocumentElement;
node = root.SelectSingleNode("/Msg/" + strRequest + "/" + strElement);
node.InnerText = strValue;
xmlDoc.Save(strFileName);
}
// reader for ASP.NET
public string ReadXMLElement()
{
doc = new XPathDocument(strFileName);
nav = doc.CreateNavigator();
// compile xPath expression
expr = nav.Compile("/Msg/" + strRequest + "/*");
iterator = nav.Select(expr);
// interate on the node set
try
{
while (iterator.MoveNext())
{
XPathNavigator nav2 = iterator.Current.Clone();
strResponse += nav2.Value + "|";
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
strResponse = strResponse.Substring(0, strResponse.Length - 1);
return strResponse;
}
}
* *} Тысяча двадцать-один