WCF - кроссплатформенный вопрос

У меня есть простой сервис WCF, собственный хостинг и клиент.net. Я генерирую прокси с помощью svcutil. Когда я добавляю прокси к клиенту, он просит добавить System.ServiceModel.dll. Ну, я могу добавить его, так как это тестовый сценарий, и я работаю на платформе.Net.

Однако предположим, что я использую машину, которая не поддерживает.Net, как эта платформа будет компенсировать System.ServiceModel?

Не могли бы вы пролить свет на это?

РЕДАКТИРОВАТЬ: У меня есть идея. Если я создаю клиент WCF, мне нужно добавить ServiceModel. Чтобы проверить это, я добавил клиента ASMX (Добавить веб-ссылку). Мой сервис mthod не принимает никаких параметров. Но я получаю сообщение об ошибке в клиенте с просьбой ввести int Result, out bool ResultSpecified. Не могли бы вы объяснить, почему?

РЕДАКТИРОВАТЬ: Не могли бы вы указать мне пример - как и что установить true в "DataContractSerializer"

Спасибо

Lijo

5 ответов

Странный вопрос. Если клиент не является приложением.NET, ему, очевидно, не понадобится System.ServiceModel, Клиенты могут быть написаны с использованием любой другой библиотеки SOAP на любом языке, используемом приложением.

Чтобы устранить необходимость в двух выходных параметрах, которые генерируются в прокси-сервере веб-службы, используйте [XmlSerializerFormat] атрибут в договоре операции. После регенерации прокси подпись метода должна соответствовать вашему определению, а не преобразовывать возвращаемый тип в тип данных "Result" и "ResultSpecified", указывающий, присутствует ли возвращаемая переменная.

Это компенсирует, бросая исключение. Для запуска приложений.NET вам необходимо установить.NET Framework. Для кроссплатформенности вы можете взглянуть на Mono.


Извините, я неправильно понял ваш вопрос. Если вы выставите конечную точку, используя basicHttpBinding, любой клиент, который соответствует WS-I Basic Profile 1.1, сможет без проблем использовать веб-сервис. Это наиболее совместимая связь.

Я думаю, что здесь есть две проблемы:

  1. Если вы самостоятельно размещаете службу, но хотите, чтобы клиенты, не созданные с использованием.NET, имели к ней доступ, то, возможно, вам следует рассмотреть возможность размещения ее в IIS. В качестве альтернативы вам необходимо убедиться, что ваше хостинговое приложение также содержит привязки метаданных (MEX), чтобы не.NET-платформы могли получить доступ к WSDL.

  2. Если вы создаете не.NET-клиент, вы бы вместо этого использовали набор инструментов или платформу для этой платформы. В таком случае вы будете использовать различные инструменты для создания прокси для вашего сервиса вместо WSDL.

Надеюсь, это поможет.

Другие вопросы по тегам