WCF: делиться библиотеками с не-.NET веб-сервисом - PullRequest
0 голосов
/ 12 апреля 2010

Я представил процесс Sonic ESB как веб-сервис и написал приложение .NET для загрузки данных в него, вызывая его методы.

Для этого у меня есть библиотека сложных объектов на стороне .NET, которую я добавил в формате xml в определение веб-службы на стороне Sonic ESB. Это необходимый шаг в раскрытии процесса Sonic ESB, поскольку вызываемые методы должны иметь возможность распознавать объекты, передаваемые из приложения .NET.

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

Таким образом, следующий код выдает ошибку:

    public string PushManifest(FargoGate.DtoLib.OutboundFargoMessage message)
    {
        FargoGateOnRampWSRequest wsRequest = new FargoGateOnRampWSRequest();

        OutboundFargoMessage outMessage = new OutboundFargoMessage();

        //TODO ERROR: Cannot convert source type 'FargoGate.DtoLib.OutboundMessage' to target type 'PollFargoJob.FargoGateOnrampWS.OutboundFargoMessage'
        wsRequest.OutboundFargoMessage = message;

        throw new NotImplementedException();
    }

Любые предложения будут с благодарностью!

Ответы [ 3 ]

0 голосов
/ 12 апреля 2010

Попробуйте Идентичные типы в отдельных веб-службах и, в частности, первый ответ там.

У меня нет четкого представления о том, что вы делаете, но, похоже, это то, что вам нужно.

0 голосов
/ 14 апреля 2010

Мне кажется, что мне вообще не нужен svcutil.exe, как предлагается, а скорее продолжаю генерировать схему для модели данных с использованием xsd.exe. Я сделал это для того, чтобы модель данных была одинаковой с обеих сторон сервиса. Однако по какой-то причине я не смог правильно создать веб-сервис, так как Sonic Workbench продолжает падать всякий раз, когда я пытаюсь использовать обновленную схему. Возможно, схема слишком сложна для обработки в Workbench?

Ну, теперь я решил это с помощью подвоха. Вместо использования WCF я использую стандартный .NET 2.0 способ регистрации веб-службы. В веб-сервисе Sonic ESB я установил тип входного параметра в строку, а не тип данных из библиотеки. В коде .NET, вызывающем операцию веб-службы, я сериализую объект в xml и передаю полученную строку веб-службе.

Таким образом, вместо передачи сериализованного объекта, я передаю строку, содержащую xml сериализованного объекта. И это похоже на работу!

Это плохое решение, я знаю, но я в отчаянии.

0 голосов
/ 12 апреля 2010

Я недавно сталкивался с подобной проблемой, есть несколько ссылок, которые мне помогли, главное - попытаться использовать такие инструменты, как SVCUTIL, а не с VS:

http://kjellsj.blogspot.com/2008/06/wcf-using-shared-types.html

http://msdn.microsoft.com/en-us/library/aa702581.aspx

...