20.02.2015, 19:14 | #1 |
Участник
|
dynamics-coe: Outbound HTTP adapter for AIF in Dynamics AX 2012
Источник: http://blogs.msdn.com/b/dynamics-coe...r-for-aif.aspx
============== There are lots of inbound integration adapters in AX2012 R3, including the File System, TCP, HTTP, Azure Service Bus and MSMQ, but just 2 outbound ones: File System and MSMQ. Both of them are asynchronous only and slow due to disc operations, very bad indeed in our brave cloud world. Let me close this gap and introduce a small HTTP adapter written in X++, which uses the .NET HttpWebRequest API. The core method is just 66 lines long: public void sendMessage(AifGatewayMessage gatewayMessage) { System.Net.HttpWebRequest httpWebRequest; System.Net.HttpWebResponse httpWebResponse; System.IO.Stream requestStream, messageStream, responseStream; System.IO.StreamReader responseStreamReader; System.Byte[] byteArray; System.Text.Encoding encoding; int msgLength; str response; if (! adapterIntialized) throw error("@SYS95134"); httpWebRequest = System.Net.WebRequest::Create(transportAddress) as System.Net.HttpWebRequest; try { if (gatewayMessage.parmMessageStream() != null) { messageStream = gatewayMessage.parmMessageStream(); messageStream.Read(byteArray, 0, int642int(messageStream.get_Length())); } else { encoding = System.Text.Encoding::GetEncoding(gatewayMessage.parmEncoding()); byteArray = encoding.GetBytes(gatewayMessage.parmMessageXml()); } msgLength = byteArray.get_Length(); // Set HttpWebRequest properties httpWebRequest.set_Method("POST"); httpWebRequest.set_ContentLength(msgLength); httpWebRequest.set_ContentType(strFmt("text/xml; charset=%1", gatewayMessage.parmEncoding())); requestStream = httpWebRequest.GetRequestStream(); // Writes a sequence of bytes to the current stream requestStream.Write(byteArray, 0, msgLength); // Close stream requestStream.Close(); // Sends the HttpWebRequest, and waits for a response. httpWebResponse = httpWebRequest.GetResponse(); if (httpWebResponse.get_StatusCode() == System.Net.HttpStatusCode::OK) { // Get response stream into StreamReader responseStream = httpWebResponse.GetResponseStream(); responseStreamReader = new System.IO.StreamReader(responseStream); response = responseStreamReader.ReadToEnd(); } httpWebResponse.Close(); } catch (Exception::CLRError) { messageId = gatewayMessage.parmMessageId(); // to re-send if needed throw error(strfmt("The HTTP adapter is unable to transmit the message to %1. Error: %2", transportAddress, AifUtil::getClrErrorMessage())); } } Attached you may find an XPO file with the source code, as well as a tiny runtime listener in C# and a simple test routine to play with. Источник: http://blogs.msdn.com/b/dynamics-coe...r-for-aif.aspx
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
21.02.2015, 18:34 | #2 |
Модератор
|
Перенес в Базу знаний
__________________
-ТСЯ или -ТЬСЯ ? |
|
24.02.2015, 10:28 | #3 |
Участник
|
Не проще ли создать VS проект, подключить Service Reference к внешнему WCF и дергать любые веб методы из X++? Или я чтото пропустил ....
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
24.02.2015, 10:42 | #4 |
Участник
|
Сравните "создать в VS... подключить... дергать в Х++" vs "дать возможность настраивать администратору Аксапты"
|
|
26.02.2015, 10:18 | #5 |
Модератор
|
Цитата:
Цитата:
Не проще ли создать VS проект, подключить Service Reference к внешнему WCF и дергать любые веб методы из X++?
__________________
-ТСЯ или -ТЬСЯ ? |
|
26.02.2015, 10:57 | #6 |
Участник
|
|
|
26.02.2015, 11:30 | #7 |
Модератор
|
С этим никто и не спорил. Вот только ссылки на сервисы сами (DEV на TEST, TEST на PROD) во время переноса не поменяются. Поэтому и хочется чтобы они (references) не были прошиты в AOT и соответственно не перезжали при переносе объектов, а были частью конфигурации. Собственно этим адаптер и удобен. Вообще непонятно как и в чью светлую голову могла прийти мысль выпилить стандартный outbound http адаптер имевшийся (и работающий) в старых версиях
__________________
-ТСЯ или -ТЬСЯ ? |
|
26.02.2015, 11:40 | #8 |
Участник
|
А как решается эта проблема в стандартном C#? App.config?
|
|
26.02.2015, 11:54 | #9 |
Модератор
|
Цитата:
Chester: Okay, Ted, do you know how long it takes the average American to count to 600?
Ted the Bellhop: [Thinks for a bit] Angela: It's a rhetorical question, Ted. Ted the Bellhop: No, sir.
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: belugin (3). |
26.02.2015, 18:14 | #10 |
Участник
|
Цитата:
|
|
11.03.2015, 12:12 | #11 |
Модератор
|
Кстати, теперь (начиная с CU8) c Reference должно стать чуть полегче
KB2998611 - No API is available for dynamically changing the target of a web service reference
__________________
-ТСЯ или -ТЬСЯ ? |
|
Теги |
aif, ax2012 |
|
|