«Обратный» сервис WCF (построение сервера из определения клиента) - PullRequest
1 голос
/ 06 октября 2009

.Net предоставляет несколько замечательных механизмов для определения удаленного сервиса и последующего «автоматического» создания клиента для подключения к нему, скрывая большую часть неприятной проводки и суеты. Но есть ли подобный маршрут для движения в другую сторону?

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

Так есть ли способ, о котором я не знаю, чтобы создать интерфейс службы из WSDL или подобного дескриптора? В первую очередь, глядя на .NET 3.5 здесь, используя C # и WCF. Спасибо!

Ответы [ 2 ]

2 голосов
/ 06 октября 2009

Если у вас есть WSDL, описывающий методы, которые хочет вызвать ваш клиент, плюс XSD (схема XML), которая описывает, какие элементы данных он будет ожидать и отправлять и получать, у вас есть все, что нужно для создания службы из него. Это называется подходом «сначала контракт» к созданию служб WCF, и он довольно популярен, особенно в средах с требованиями к взаимодействию (например, клиент Java и службы .NET или наоборот).

Используя svcutil.exe, вы можете создать класс интерфейса службы - описание вашей службы. Он будет содержать контракт на обслуживание, контракт на эксплуатацию и контракт на передачу данных.

svcutil yourMethods.wsdl yourDataSchema.xsd /language:C# /out:YourServiceInterface.cs
(or /language:VB, if you prefer VB.NET)

Это создаст файл YourServiceInterface.cs (или YourServiceInterface.vb), который является основой для кода вашего сервера.

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

И, наконец, что не менее важно, вам нужно решить, как разместить вашу службу - в IIS или самостоятельно в консольном приложении, службе NT или каким-либо другим способом.

Марк

2 голосов
/ 06 октября 2009

Да , вы определенно можете создать контракт службы WCF (интерфейс) из файла WSDL: используйте svcutil.exe .

...