Force.NET webservice использовать локальный класс объекта, а не прокси-класс



web-services class (2)

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

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

По тому, как вы описываете проблему, похоже, что вы хотите, чтобы служба и клиент делились одним и тем же экземпляром. Поскольку WCF выполняет сериализацию и десериализацию ваших типов по мере их отправки в службу и из нее, вам нужно будет сделать что-то более умное. Это то, что вы имели в виду?

https://ffff65535.com

У меня есть веб-сервис, который я вызываю из приложения Windows Forms (как .NET, так и в том же решении), и я хотел бы, чтобы мой веб-сервис возвращал пользовательский объект из другого места проекта - это обычный объект, который они оба имеют ссылку на них, как это было в третьем проекте в моем решении. Когда я вызываю веб-сервис, он возвращает объект «Person», но он находится в пространстве имен веб-службы и создается из прокси-класса, который сам создавал веб-сервис. Таким образом, я не могу манипулировать им и возвращать его в свою программу, которая ожидает объект «Person» на основе общей копии класса, а не прокси-копии из пространства имен webservice, и я получаю сообщение об ошибке при попытке для CType для правильного типа класса.

Как заставить веб-службу использовать локальную копию класса, а не прокси-копию? Имеет ли мой вопрос смысл в этом контексте? Если нет, я уточню это.

Обратите внимание: я прибегал к передаче всех параметров ByRef и использованию этих возвращаемых значений для заполнения копии объекта, который я создаю при возврате. Это не лучший способ сделать это!


Если вы используете svcutil.exe для создания прокси-сервера WCF, вы можете использовать / ссылку в командной строке, чтобы указать сборку, содержащую общий класс. Svcutil должен повторно использовать это определение класса вместо генерации нового в пространстве имен прокси-сервера службы.

Кроме того, это будет работать только в том случае, если ваш общий класс сериализуется и передается по значению (т.е. он отображается как контракт с данными, а не как контракт на обслуживание).





proxy-classes