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

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

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

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

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

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

Спасибо

Lijo


person Lijo    schedule 06.06.2010    source источник


Ответы (5)


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

person Thorarin    schedule 06.06.2010

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


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

person Darin Dimitrov    schedule 06.06.2010
comment
Я уже использую binding = basicHttpBinding, но клиент просит меня добавить SYstem.ServiceModel. - person Lijo; 06.06.2010
comment
Какой клиент вы используете? Какой язык / платформа? Если это клиент .NET, созданный с помощью svcutil, конечно, он попросит вас System.ServiceModel (см. Мой ответ перед редактированием). Если это машина, на которой установлена ​​только .NET 2.0, а не .NET 3.0 или новее, вы можете использовать wsdl.exe для создания клиентского прокси. - person Darin Dimitrov; 06.06.2010
comment
Я получил некоторую идею. Если я создаю клиент WCF, мне нужно добавить ServiceModel. Чтобы проверить это, я добавил клиент ASMX (Добавить веб-ссылку). Мой метод обслуживания не принимает никаких параметров. Но я получаю сообщение об ошибке в клиенте с просьбой ввести int ‹methodname› Result, out bool ‹methodname› ResultSpecified. Не могли бы вы объяснить почему? - person Lijo; 06.06.2010
comment
Да, это свойства, которые автоматически добавляются для параметров типа значения при использовании DataContractSerializer на стороне сервера. Вам нужно установить их на true, когда вы указываете значение для соответствующего параметра. Если они вам не нужны, вы можете переключить службу на использование XmlSerializer, добавив атрибут [XmlSerializerFormat] в контракт службы. Затем повторно сгенерируйте клиентский прокси (Добавить веб-ссылку), и они исчезнут. - person Darin Dimitrov; 06.06.2010
comment
Спасибо. Не могли бы вы указать мне на пример - как и что установить в DataContractSerializer. - person Lijo; 06.06.2010
comment
Установите для параметров xxxSpecified значение true на стороне клиента при вызове службы. - person Darin Dimitrov; 06.06.2010

Какие привязки вы используете ?!

См. Также Независимо от платформы WCF?

Руководство по взаимодействию протоколов веб-служб

WSIT для технологий взаимодействия веб-служб

person salgo60    schedule 06.06.2010
comment
Я использую binding = basicHttpBinding - person Lijo; 06.06.2010

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

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

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

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

person Tim Roberts    schedule 17.06.2010

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

person carmbrester    schedule 17.02.2011