#c# #asp.net #web-services #com
#c# #asp.net #веб-сервисы #com
Вопрос:
У меня есть веб-сервис, который обертывает функции COM-объекта с целью уменьшения ошибок связи RPC. Параметр, который я передаю конкретному веб-сервису, является string[]
. Проблема, по-видимому, заключается в функции COM-объекта, для которой требуется ссылка на объект.
Некоторые ошибки будут отображаться на веб-странице, потому что они происходят из comClass (ошибка 87), другие являются ошибками компилятора. Я попытался указать, что есть что ниже.
[WebMethod(EnableSession=true)]
public int WSFunc(string[] StringArray){
//object StringArr = (object)((object[])StringArr); //returns error 87 in webpage log
//object StringArr = (object)StringArr; //returns error 87 in webpage log
//public override int COMClass.Func(ref object pStringList)
return COMClass.Func(ref StringArr);
//return COMClass.Func(ref StringArray); //Doesn't build, cannot convert from 'ref string[]' to 'ref object' (CS1503)
//return COMClass.Func(ref (object)StringArr); //Doesn't build, A ref or out argument must be an assignable variable (CS1510)
}
Кроме того, это приводит к тому же результату (ошибка 87 — неверный параметр):
[WebMethod(EnableSession=true)]
public string WSFunc(string[] StringArray){
object[] StringObj = new object[StringArray.Length];
for(int i = 0; i < StringArray.Length; i ){
StringObj[i] = StringArray[i];
}
object MyString = (object)StringObj;
return ComClass.Func(ref MyString);
}
Кто-нибудь еще сталкивался с этой проблемой?
Комментарии:
1. Вы не можете передавать объекты в COM, он понятия не имеет, что такое объект. Вам придется ее маршалировать. msdn.microsoft.com/en-us/library/aa719715 (v=против 71).aspx и msdn.microsoft.com/en-us/library/aa719861 (v=против71).aspx
Ответ №1:
Я думаю, эта статья должна помочь вам настроить маршалинг для com-взаимодействия.
http://msdn.microsoft.com/en-us/library/aa645736 (v=против71).aspx
Комментарии:
1. Я нашел этот pdf файл, который объясняет маршалинг очень простым способом. Я собираюсь создать класс, который оборачивает библиотеку DLL COM-объекта. Я полагаю, что код C # сможет выполнить этот класс, который затем маршалирует переменные… Я никогда не ожидал, что будет так сложно выполнить COM-объект на C #.
2. Это требует изрядного количества настроек, но приятно то, что, как только вы это настроите и начнете работать, будет довольно легко продолжать добавлять больше, если вам нужно.