Для тестирования использую следующий код. В теле сообщения произвольный текст, а не XML, но это прокатывает.
X++:
AifChannelId channelId = "myTstChannelOut"; // TODO необходимо задать код канала с формы Каналы
AifChannel channel = AifChannel::find(channelId);
AifAdapter adapter = AifAdapter::find(channel.AdapterClassId);
AifInfoLog aifInfoLog = new AifInfoLog();
AifMessageId messageId = newguid();
UserID userID = curuserid();
SysDictClass adapterClassObject;
AifMSMQSendAdapter sendAdapter;
AifResourceLockId channelLockId;
boolean inAdapterTransaction = false;
AifGatewayMessage gatewayMessage;
AifMessage message;
AIfresourceLock resourceLock;
AifIntegrationAdapter integrationAdapter;
;
// delete_from resourceLock;
channelLockId = AifResourceLock::lockResource(channelId, AifResourceType::Channel, AifResourceLockType::Gateway);
if (guid2str(channelLockId) != #EmptyGuidString)
{
try
{
aifInfoLog.reset();
adapterClassObject = new SysDictClass(channel.AdapterClassId);
if (adapterClassObject.isImplementing(classnum(AifIntegrationAdapter)))
{
integrationAdapter = adapterClassObject.makeObject();
sendAdapter = new AifMSMQSendAdapter();
if (sendAdapter == null)
throw error(strfmt("@SYS95140", classId2Name(classidget(integrationAdapter))));
}
// new InteropPermission(InteropKind::ClrInterop).assert(); // TODO Раскоментарить если выполняется на сервере
sendAdapter.initialize(channel.TransportAddress, channelId);
ttsbegin;
sendAdapter.begin();
inAdapterTransaction = true;
gatewayMessage = new AifGatewayMessage(
'Привет мир!',
enum2str(AifGlobalSettings::getEncodingFormat()),
userID,
messageId);
// Send message
sendAdapter.sendMessage(gatewayMessage);
// Update messageLog message as Processed
if (AifMessageManager::isNewMessage(gatewayMessage.parmMessageId()) == false)
{
message = AifMessageManager::read(gatewayMessage.parmMessageId());
message.status(AifMessageStatus::Processed);
AifMessageManager::update(message, classstr(AifGatewaySendService), false);
}
// Commit transaction
sendAdapter.commit();
ttscommit;
CodeAccessPermission::revertAssert();
}
catch(Exception::CLRError)
{
AifResourceLock::releaseResource(channelLockId);
throw error(AifUtil::getClrErrorMessage());
}
}
sendAdapter.terminate();
AifResourceLock::releaseResource(channelLockId);
info(strFmt("Готово! %1", messageId));