|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Set wsdl resonse type |
|
PowerShell - [решено] Set wsdl resonse type
|
Новый участник Сообщения: 31 |
Профиль | Отправить PM | Цитировать Здравствуйте!
Столкнулся со следующей проблемой: Есть wsdl сервис (на базе 1С, если это важно), разумеется с методами и типами. При вызове одного из методов возвращается ответ не указанного ранее типа, что приводит к ошибке обработки ответа. Подключаюсь и вызывают метод следующим образом: Объявление сервиса и вызов метода
$WsdlLink = "http://$SrvName/$DBName/WS/$PageName.1cws?wsdl" $Service = New-WebServiceProxy -Uri $WsdlLink $Type = $Service.GetType().Namespace $FindingObjectComplexType = New-Object ($Type + '.Object') $ChangingObjectComplexType = New-Object ($Type + '.Object') $FindingObjectComplexType.Identity = "ObjectIdentity_XXX" $ChangingObjectComplexType.Value = "Value_YYY" $Service.SetObject($FindingObjectComplexType, $ChangingObjectComplexType) После выполнения сервис возвращает код ошибки в формате объекта ( $Type + '.SetResult' ), но т.к. этот тип в контексте выполнения не известен, то по результату выполнения метода "SetObject" имею следующую ошибку: Ошибка
Exception: System.Management.Automation.MethodInvocationException: Exception calling "SetObject" with "2" argument(s): "There is an error in XML document (4, 5)." ---> System.InvalidOperationException: There is an error in XML document (4, 5) . ---> System.InvalidOperationException: The specified type was not recognized: name='ChekResult', namespace='http://contoso.com', at <return xmlns='http://contoso.com'>. at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderObjects.Read7_SetResult(Boolean isNullable, Boolean checkType) at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderObjects.Read8_SetObjectResponse( ) at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) --- End of inner exception stack trace --- at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) at Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy$PartOfType.Objec ts.SetObject(Object Property_1, Object Property_2) at CallSite.Target(Closure , CallSite , Object , Object , Object ) --- End of inner exception stack trace --- at System.Management.Automation.ExceptionHandlingOps.ConvertToMethodInvocationException(Exception exception, Type typeToThrow, String methodName, Int32 numArgs, MemberInfo memberInfo) at CallSite.Target(Closure , CallSite , Object , Object , Object ) at System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2) at System.Management.Automation.Interpreter.DynamicInstruction`4.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) TargetObject : CategoryInfo : NotSpecified: ( : ) [], MethodInvocationException FullyQualifiedErrorId : InvalidOperationException Если смотреть на http запрос\ответ, то имеем следующее: Запрос:
POST /$DBName/WS/Objects.1cws HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.42000) Content-Type: text/xml; charset=utf-8 SOAPAction: "http://contoso.com#Objects:SetObject" Authorization: Basic AAAAAAAAAAAAAAAAA== Host: $SrvName Content-Length: 801 Expect: 100-continue HTTP/1.1 100 Continue <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <SetObject xmlns="http://contoso.com"> <FindingObject> <Identity>ObjectIdentity_XXX</Identity> <Value /> </FindingObject> <ChangingObjectData> <Identity /> <Value>Value_YYY</Value> </ChangingObjectData> </SetObject> </soap:Body> </soap:Envelope> Ответ:
HTTP/1.1 200 OK Content-Type: text/xml;charset=utf-8 Server: Microsoft-IIS/8.5 X-Powered-By: ASP.NET Date: Tue, 01 Jan 2000 00:01:02 GMT Content-Length: 392 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <m:SetObjectResponse xmlns:m="http://contoso.com"> <m:return xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="m:ChekResult"> <m:Code>0</m:Code> </m:return> </m:SetObjectResponse> </soap:Body> </soap:Envelope> Тут явно видно, что отправлял я два параметра типа ($Type + '.Object') , а в результате выполнения получаю объект типа ($Type + '.SetResult') PS C:\> New-Object ($Type + '.SetResult') | FL Code : 0 ErrorDescription : Собственно, как получать в данном случае корректно код результата работы сервера, а не парсить содержимое ErrorVariable в поисках ответа. (очень надеюсь, что описал понятно. и не сильно напутал в терминах) |
|
Отправлено: 00:49, 11-07-2018 |
Новый участник Сообщения: 31
|
Профиль | Отправить PM | Цитировать Была ошибка в формате ответа. там получился xml внутри soap.
Решение или парсить xml и работать через invoke-WebRequest пересобирая xml запроса\ответа или исправить формат ответа на стороне сервиса. |
Последний раз редактировалось Wheee111, 22-07-2018 в 21:41. Причина: Чуть подробнее расписал ошибку. Аналогов в русском сегменте интернета не нашел. Отправлено: 10:41, 18-07-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - Альтернатива Add-Type | jkadaba | Скриптовые языки администрирования Windows | 4 | 04-09-2016 13:33 | |
Интерфейс - Clear Type в Windows 8 | Кукулькан | Microsoft Windows 8 и 8.1 | 7 | 15-12-2014 16:02 | |
Type Pilot 2.8.3 | OSZone Software | Новости программного обеспечения | 0 | 01-07-2011 19:30 | |
set temp в формате8 | akpar | Microsoft Windows 2000/XP | 2 | 04-11-2006 13:59 | |
Переместить Doc-s and Set-s | kirillkr | Автоматическая установка Windows 2000/XP/2003 | 3 | 20-03-2005 19:06 |
|