Вызов службы WCF без входных параметров в BizTalk Orchestration - PullRequest
1 голос
/ 27 января 2012

Я пытаюсь вызвать веб-службу WCF, размещенную на IIS, которая просто возвращает текущую дату из оркестровки BizTalk.Для этой службы нет входных параметров.

Пожалуйста, игнорируйте формы First Receive_1 и Last Send_1, так как я только использовал их, чтобы начать работу с этой оркестровкой.Моя оркестровка выглядит следующим образом:

enter image description here

Я использовал мастер «Добавить сгенерированные элементы ...», чтобы добавить сгенерированную ссылку на веб-сервис в Оркестрации.Мое определение веб-службы выглядит следующим образом:

[ServiceContract]
public interface ICalculator
{
    [OperationContract]
    DateTime GetLastExecutionDate();
}

public class CalculatorService : ICalculator
{

    public DateTime GetLastExecutionDate()
    {
        return DateTime.Now.AddMonths(-6);
    }
}

После того, как я добавил сгенерированную ссылку в проект BizTalk, мастер создал набор портов и сообщений из нескольких частей, как показано ниже:

enter image description here

Я также создал локальные сообщения для передачи данных между этими вызовами, как показано ниже:

enter image description here

Теперь я везде читал, что мне нужно будет построитьInputMessage для вызова веб-службы без параметров.

Некоторые форумы / веб-сайты говорят, что мне нужно просто создать пустую форму ConstructMessage с типом MessageType сообщения dateRequest.При этом проект не компилируется, и я получаю следующее сообщение об ошибке:

enter image description here

И другой предлагаемый элемент - сделать MessageAssignment дляпустой документТаким образом, форма MessageAssginment в моем Orchestration имеет следующее:

xDoc = new System.Xml.XmlDocument();
xDoc.LoadXml("<GetLastExecutionDate/>");
dateRequest.parameters = xDoc;

Пока этот компонент компилируется и получает развертывание, мой экземпляр BizTalk get приостанавливается со следующим исключением:

Произошел сбойвыполнение конвейера отправки: "Microsoft.BizTalk.DefaultPipelines.XMLTransmit, Microsoft.BizTalk.DefaultPipelines, версия = 3.0.1.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35" Источник: "ассемблер XML" Порт отправки: "REDACTED_1.0.0.0_REDACTED.ExportData_WCFPort_dace989afd9cd9c5 "URI:" http://localhost/COMPANYNAME/WCFService/Service.svc" Причина: этот Ассемблер не может получить спецификацию документа, используя этот тип: "GetLastExecutionDate".

И данные параметров, передаваемые в службу:

Итак, мой вопрос: как мне вызвать службу WCF, которая не ожидает никаких входных параметров.

Ответы [ 3 ]

1 голос
/ 27 января 2012

Перейдите к файлу схемы сообщения с запросом на обслуживание из Visual Studio.

Щелкните правой кнопкой мыши -> Создать экземпляр.

Получите созданный экземпляр XML и замените все двойные кавычки одинарными.

Затем вставьте это в свой LoadXml () в вашем назначении

enter image description here

0 голосов
/ 11 сентября 2013

Вы используете конвейер XMLTransmit, и для него может быть несколько основных причин, выдавая сообщение об ошибке

"Причина: этот Ассемблер не может получить спецификацию документа, используя этот тип: xxx"

Наиболее вероятная причина в том, что у вас нет развернутой схемы, соответствующей сообщению, которое вы передаете.

Но хорошая новость заключается в том, что в этом сценарии нет необходимости в конвейере XMLTransmit.Просто измените send-pipe на PassThruTransmit, и он, скорее всего, решит хотя бы эту проблему.

0 голосов
/ 27 января 2012

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

Вы также можете использовать xsd.exe для создания классов .NET из схемы веб-службы.

См. http://msdn.microsoft.com/en-us/library/aa547985(BTS.20).aspx для полного списка способов создания сообщения в оркестровке.

...