Добавлено: 29 апр 2009, 19:45
это тебе не поможет. У тебя уже какие-то методы web сервисов запускаются, например vOrganization_InitId (нашел, что это вызов конструктора с передачей KatOrg.NRec). Сейчас рефлектором гляну что там внутрях
Обсуждение различных вопросов, связанных с сопровождением, администрированием и программированием
https://ns1.tyumbit.ru/
Код: Выделить всё
- <s:element name="IOrganization_getData">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="handle" type="tns:ifcHandle" />
</s:sequence>
</s:complexType>
</s:element>
Код: Выделить всё
[WebMethod(EnableSession = false)]
public IOrganization[] IOrganization_getData (ifcHandle handle)
{
using (InterfaceLink ifc = Services.GetObject(this,handle))
{
IOrganization[] data;
int rCode = IOrganizationDater.getData ((CORGANIZATIONLib.IOrganization)ifc.link,out data);
if (rCode == 0) return data;
throw new Exception (String.Format ("IOrganization_getData error = {0}",rCode));
}
}
Код: Выделить всё
public static InterfaceLink GetObject(WebService service, ifcHandle handle)
{
if (handle.isEmpty())
{
throw new Exception("this is nil");
}
ConnectedUser user = ConnectedUser.GetUser(GetUserName(service));
if (user == null)
{
throw new UnauthorizedAccessException("invalid user name");
}
return user.GetInterface(handle);
}
...
public InterfaceLink GetInterface(ifcHandle handle)
{
InterfaceLink link2;
VipInterfaceList interfaceList = this.GetInterfaceList(handle);
InterfaceLink interfaceLink = null;
try
{
Services.currentUser = this;
Services.currentList = interfaceList;
interfaceLink = interfaceList.GetInterfaceLink();
if (interfaceLink == null)
{
interfaceLink = interfaceList.GetInterfaceLink(this.GetConnection(), false);
}
if (InterfaceLink.Apply(ref interfaceLink.link, handle.properties) != ifcBindResult.Ok)
{
throw new Exception("error in processing properties: " + handle.ToString());
}
interfaceLink.myUser = this;
link2 = interfaceLink;
}
catch (Exception exception)
{
if (interfaceLink != null)
{
interfaceLink.Close();
}
else
{
Services.currentList = null;
Services.currentUser = null;
}
throw exception;
}
return link2;
}
Код: Выделить всё
System.Web.Services.Protocols.SoapException: Серверу не удалось обработать запрос. ---> System.InvalidCastException: Невозможно привести COM-объект типа "System.__ComObject" к интерфейсному типу "C_WEBSERVICESLib.o_vGroupMC". Операция завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID "{6166253F-6535-4B21-AB3C-33F3FF37F5F7}" возвратил следующую ошибку: Интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).
в Atlantis.Vip.ConnectedUser.GetInterface(ifcHandle handle)
в Atlantis.Vip.Services.GetObject(WebService service, ifcHandle handle)
в C_WEBSERVICESService.IGroupMC_getData(ifcHandle handle)
Код: Выделить всё
<add key="Atlantis.VipService.ConnectUserName" value="<пользователь галактики>" />
<add key="Atlantis.VipService.DefaultUserName" value="пользователь галактики" />
<add key="Atlantis.VipService.ConnectPassword" value="пароль" />
Всех этих граблей не было бы, если при получении соединения вызывалась функция Connect("user", "password"), а не ConnectAs("user", "password", "workUser")Сервер
VerifyPassword
ConnectAs rigths needed.
Код: Выделить всё
using System;
using Atlantis.Vip;
using CINVOICE;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
// Создаем описатель (хэндлер) vip интерфейса
// InitId - конструктор (передаваемый параметр - NRec KatSopr-а)
var ifc = new ifcHandle("CINVOICE", "vInvoice", "InitId", new Object[] { 85849867896771336 });
// Получаем собственно данные по сопроводительному документу
// Под кем собственно будем работать
// (под кем будем подключаться - задаем в App.Config)
var user = ConnectedUser.GetUser("galUser");
var ifcLnk = user.GetInterface(ifc);
IInvoice[] data;
IInvoiceDater.getData((CINVOICELib.IInvoice)ifcLnk.link, out data);
foreach (var invoice in data)
{
var org = (invoice.Payer != null && invoice.Payer.Length != 0) ? invoice.Payer[0].Name : null;
var orgPlat = (invoice.Payee != null && invoice.Payee.Length != 0) ? invoice.Payee[0].Name : null;
Console.WriteLine("Сопроводительный документ {0}\nКонтрагент: {1}\nПлательщик: {2}", invoice.Name, org, orgPlat);
}
}
}
}