Найдено результатов: 11

Каков ваш предпочтительный метод отправки сложных данных через веб-сервис?

Это 2008 год, и я все еще разрываюсь на этом. Поэтому я разрабатываю веб-метод, который нуждается в сложном типе, передаваемом в него и возвращаемом из него. Два варианта, с которыми я играю, это:

  1. Передача и возврат реальных бизнес-объектов с данными и поведением. Когда wsdl.exe запускается, он автоматически создает прокси-классы, которые содержат только часть данных, и они будут автоматически преобразованы в мои реальные бизнес-объекты и из них на стороне сервера. На стороне клиента они будут использовать только тупой тип прокси, и им придется сопоставлять их с некоторыми реальными бизнес-объектами, как они считают нужным. Большой недостаток здесь заключается в том, что если я "own" как серверная, так и клиентская сторона, и я хочу использовать один и тот же набор реальных бизнес-объектов, я могу столкнуться с определенными головными болями с конфликтами имен и т. д. (Поскольку реальные объекты и прокси называются одинаково.)

  2. Забудьте о попытке передать "real" бизнес-объектов. Вместо этого просто создайте простые объекты DataTransfer, которые я буду сопоставлять с моими реальными бизнес-объектами вручную. Они все равно копируются в новые прокси-объекты wsdl.exe, но по крайней мере я не обманываю себя, думая, что веб-сервисы могут изначально обрабатывать объекты с бизнес-логикой в них.

Кстати-кто-нибудь знает, как сказать wsdl.exe, чтобы не делать копию объекта? Разве мы не должны просто сказать ему: "Эй, используй этот существующий тип прямо здесь. Не копируйте его!"

Во всяком случае, пока я вроде как остановился на #2, но мне любопытно, что вы все думаете. У меня есть чувство, что есть гораздо лучшие способы сделать это в целом, и я даже не могу быть полностью точным по всем пунктам, поэтому, пожалуйста, дайте мне знать, что вы испытали.

Update: я только что узнал, что VS 2008 имеет возможность повторно использовать существующие типы при добавлении "ссылки на службу", а не создавать совершенно новый идентичный тип в файле прокси. Сладкий.

.net   web-services   soap   wsdl    

431   4   08:42, 18th August, 2020


Исключение soapexception: отсутствует корневой элемент возникает, когда веб-служба .NET называется от Flex

У меня есть веб-приложение .net, которое имеет приложение Flex, встроенное в страницу. Это приложение flex вызывает веб-сервис .net. Я могу trace процесс выполнения через отладчик и все выглядит отлично, пока я не получу ответ:




soap:ReceiverSystem.Web.Services.Protocols.SoapException: Server was unable to process request

. ---> System.Xml.XmlException: Root element is missing.

   at System.Xml.XmlTextReaderImpl.Throw(Exception e)

   at System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res)

   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()

   at System.Xml.XmlTextReaderImpl.Read()

   at System.Xml.XmlTextReader.Read()

   at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read()

   at System.Xml.XmlReader.MoveToContent()

   at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.MoveToContent()

   at System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement()

   at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()

   at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)

   at System.Web.Services.Protocols.SoapServerProtocol.Initialize()

   at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest

 request, HttpResponse response, Boolean& abortProcessing)

   --- End of inner exception stack trace ---

Вызов от flex выглядит хорошо, выполнение через веб-сервис хорошо, но это ответ, который я захватываю через wireshark, что здесь происходит?

Я попробовал несколько веб-методов, от "Hello World" до параматизированного methods...all возвращения с тем же ответом...

Я подумал, что это может иметь какое-то отношение к кодированию с помощью "---&gt",, но я не уверен, как управлять тем, что .net выводит в качестве ответа.

flex   web-services   soap    

729   3   21:47, 10th August, 2020


Вызов веб-службы ASP.NET из ASP с помощью SOAPClient

У меня есть веб-сервис ASP.NET с такими функциями, как:

[WebService(Namespace = "http://internalservice.net/messageprocessing")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class ProvisioningService : WebService
{
    [WebMethod]
    public XmlDocument ProcessMessage(XmlDocument message)
    {
        // ... do stuff
    }
}

Я вызываю веб-службу из ASP, используя что-то вроде:

provWSDL = "http://servername:12011/MessageProcessor.asmx?wsdl"
Set service = CreateObject("MSSOAP.SoapClient30")
service.ClientProperty("ServerHTTPRequest") = True
Call service.MSSoapInit(provWSDL)

xmlMessage = "<request><task>....various xml</task></request>"
result = service.ProcessMessage(xmlMessage)

Проблема, с которой я сталкиваюсь, заключается в том, что когда XML достигает метода ProcessMessage, веб-служба plumbing попутно добавила пространство имен по умолчанию. т. е. если я установлю точку останова внутри ProcessMessage (сообщение XmlDocument), я увижу:

<request xmlns="http://internalservice.net/messageprocessing">
  <task>....various xml</task> 
</request>

Когда я захватываю пакеты по проводу, я вижу, что XML, отправленный инструментарием SOAP, немного отличается от того, что отправлено клиентом .NET WS. Набор инструментов SOAP отправляет:

<SOAP-ENV:Envelope 
    xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" 
    xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <ProcessMessage xmlns="http://internalservice.net/messageprocessing">
            <message xmlns:SOAPSDK4="http://internalservice.net/messageprocessing">
                <request>
                    <task>...stuff to do</task>
                </request>
            </message>
        </ProcessMessage>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Если клиент отправляет .NET:

<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>
        <ProcessMessage xmlns="http://internalservice.net/messageprocessing">
            <message>
                <request xmlns="">
                    <task>...stuff to do</task>
                </request>
            </message>
        </ProcessMessage>
    </soap:Body>
</soap:Envelope>

Прошло так много времени с тех пор, как я использовал инструментарий ASP/SOAP для вызова веб-сервисов .NET, что я не могу вспомнить все умные tricks/SOAP-fu, которые я использовал, чтобы обойти подобные вещи.

Есть какие-нибудь идеи? Одним из решений является создание вызываемого COM .NET прокси, который принимает XML как строковый парам и вызывает WS от моего имени, но это дополнительный уровень сложности/работы, которую я надеялся не делать.

.net   asp.net   web-services   soap   asp-classic    

529   3   06:36, 7th August, 2020


WCF-объекты домена и IExtensibleDataObject

Типичный сценарий. Мы используем старой школы XML internally web-сервисов для обмена данными между серверами фермы и нескольких распределенных и локальных клиентов. Никакие третьи лица не участвуют, только наши приложения, используемые нами и нашими клиентами.

В настоящее время мы размышляем о переходе от модели XML WS к модели WCF/object-based и экспериментируем с различными подходами. Один из них включает в себя передачу объектов домена / агрегатов непосредственно по проводу, возможно, вызывая атрибуты DataContract на них.

Используя IExtensibleDataObject и DataContract с помощью свойства Order на DataMembers, мы должны быть в состоянии справиться с простыми проблемами управления версиями свойств (помните, что мы контролируем всех клиентов и можем легко принудительно обновить их).

Я постоянно слышу, что мы должны использовать выделенные объекты передачи данных только для передачи данных ( DTOs ) по проводу.

Почему? Есть ли еще причина для этого? Мы используем одну и ту же модель домена на стороне сервера и на стороне клиента, конечно, предварительно заполняя коллекции и т. д. только в том случае, когда это считается правильным, и свойства коллекции "necessary." используют принцип Service locator и IoC для вызова либо NHibernate-based "service" для прямой выборки данных (на стороне сервера), либо клиента WCF "service" на стороне клиента для связи с фермой серверов WCF .

Итак-почему мы должны использовать DTOs ?

wcf   serialization   soap   domain-driven-design   soa    

416   2   21:09, 27th August, 2020


Отладка веб-службы с помощью пакета SOAP

У меня есть веб-служба, которую я создал в C#, и тестовый жгут, предоставленный моим клиентом. К сожалению, мой веб-сервис, похоже,не анализирует объекты, созданные тестовым жгутом. Я считаю, что проблема заключается в сериализации пакета soap.

Используя TCPTrace, я смог получить пакет soap, переданный веб-службе, но только на удаленной машине, поэтому я не могу отладить его там. Есть ли способ вызвать мой локальный веб-сервис с генерируемым пакетом soap, а не мой текущий тестовый жгут, где я вручную создаю объекты и вызываю веб-сервис через веб-ссылку?

машина, на которой я получил пакет soap, была на виртуальной машине, поэтому я не могу связать ее с моей машиной. Я полагаю, что ищу инструмент, в который можно вставить пакет soap, и он, в свою очередь, вызовет мой веб-сервис

c#   web-services   soap   tcptrace-pocketsoap    

410   4   05:00, 27th August, 2020


Руководство по выбору между REST и SOAP услугами?

Есть ли у кого-нибудь ссылки на документацию или руководства по принятию решения между REST и SOAP? Я понимаю и то, и другое, но ищу некоторые ссылки на ключевые моменты принятия решений, например, безопасность, которые могут заставить вас склониться к тому или иному.

architecture   rest   soap    

422   4   04:17, 17th August, 2020


Как лучше всего использовать веб-сервисы в python?

У меня есть приложение среднего размера, которое работает как веб-сервис .net, который я не контролирую, и я хочу создать свободный pythonic API над ним, чтобы обеспечить легкий сценарий.

Я хотел узнать, что является лучшим / наиболее практичным решением для использования веб-сервисов в python.

Редактировать: Мне нужно потреблять комплекс soap WS и у меня нет никакого контроля над этим.

python   web-services   soap    

381   3   01:16, 23rd August, 2020


Чем сгенерировать WSDL из PHP-кода?

Есть некоторое количество классов (в Zend, symfony и другие), которые так или иначе упрощают создание WSDL, но какие-то они мутные.
Хотелось бы генерировать WSDL в IDE, как делают все белые люди принято у дотнетчиков. По слухам старая Zend Studio умела это делать, новая — нет.
А чем генерируете вы?

PHP   SOAP   WSDL    

332   5   14:46, 5th August, 2020


Чем сгенерировать WSDL из PHP-кода?

Есть некоторое количество классов (в Zend, symfony и другие), которые так или иначе упрощают создание WSDL, но какие-то они мутные.
Хотелось бы генерировать WSDL в IDE, как делают все белые люди принято у дотнетчиков. По слухам старая Zend Studio умела это делать, новая — нет.
А чем генерируете вы?

PHP   SOAP   WSDL    

443   5   05:51, 5th August, 2020


Как при помощи Zend_Soap_Client выполнить запрос при известной WSDL-схеме?

Имеется объект Zend_Soap_Client. Подключаюсь и выполняю запрос так:



$client = new Zend_Soap_Client($uri,<br>
        array(<br>
            'login' => $login,<br>
            'password' => $password,<br>
            'soapVersion' => SOAP_1_1)<br>
        );<br><br>
/*<br>
 * GetIdentityInfo<br>
 *<br>
 */<br><br>
$params = array('Profile' => $profile);<br>
$result = $client->GetIdentityInfo($params);<br>
print($result->GetIdentityInfoResult->any);<br>
print($client->getLastRequest());<br><br>
/*<br>
 * SubmitXml<br>
 * <br>
 */<br><br>
$request = simplexml_load_file('./request.xml');<br>
$filter = simplexml_load_file('./filter.xml');<br><br>
$request = xml2array($request);<br>
$filter = xml2array($filter);<br><br>
$params = array(<br>
    'Profile' => $profile,<br>
    'Request' => $request,<br>
    'Filter' => $filter);<br><br>
$result1 = $client->SubmitXml($params);<br><br>
   function xml2array($xml) {<br>
      $arXML=array();<br>
      $arXML['name']=trim($xml->getName());<br>
      $arXML['value']=trim((string)$xml);<br>
      $t=array();<br>
      foreach($xml->attributes() as $name => $value) $t[$name]=trim($value);<br>
      $arXML['attr']=$t;<br>
      $t=array();<br>
      foreach($xml->children() as $name => $xmlchild) $t[$name]=xml2array($xmlchild);<br>
      $arXML['children']=$t;<br>
      return($arXML);<br>
   }<br><br>




где $request, $filter — XML-данные (сначала как объект, затем преобразуется в массив).



Имеется WSDL-схема. Существенный кусок привожу ниже:



<s:element name="SubmitXml"><br>
<s:complexType><br>
<s:sequence><br>
<s:element maxOccurs="1" minOccurs="0" name="Profile" type="s:string"/><br>
<s:element maxOccurs="1" minOccurs="0" name="Request"><br>
<s:complexType><br>
<s:sequence><br>
<s:any/><br>
</s:sequence><br>
</s:complexType><br>
</s:element><br>
<s:element maxOccurs="1" minOccurs="0" name="Filter"><br>
<s:complexType><br>
<s:sequence><br>
<s:any/><br>
</s:sequence><br>
</s:complexType><br>
</s:element><br>
</s:sequence><br>
</s:complexType><br>
</s:element>




В первом запросе GetIdentityInfo параметр Profile проходит отлично, получаю нормальный ответ.



Во втором запросе SubmitXml параметр Profile также кушает нормально, ибо это type=«s:string». Ругается на Request и Filter ибо это XML в виде массива (или объекта?).



Отвечает:



PHP Fatal error: SOAP-ERROR: Encoding: object hasn't 'any' property in /usr/share/php/libzend-framework-php/Zend/Soap/Client.php on line 1113<br/>
PHP Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object hasn't 'any' property in /usr/share/php/libzend-framework-php/Zend/Soap/Client.php:1113




Вопрос: как быть с параметрами Request и Filter? Как мне их корректно передать? Если объект, то в каком виде?

Я вот вижу этот «any» и близок к разгадке…

В каком виде отдать параметр, соответствующий этому описанию?



<s:complexType><br>
<s:sequence><br>
<s:any/><br>
</s:sequence><br>
</s:complexType>

Zend   Framework   SOAP   WSDL    

334   2   00:41, 18th August, 2020


php SOAP Extension

Начинаю постигать SOAP, наткнулся на такую проблему: при попытке обращения к соап функции выскакивает фатал еррор Uncaught SoapFault exception: [VersionMismatch] Wrong Version. Ниже приведен код примера.

$client = new SoapClient(
'http://new.starliner.ru/modules/trains/soap/test.wsdl',
array(
'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
)
);

$result = $client->trainRoute(array('day'=>'12', 'month' => '12', 'train' => '066А'));


Гугл показал что проблема такая возникает часто, а решения так и не дал.
Так в чем же соль?

PHP   SOAP    

363   3   10:18, 4th August, 2020