Вопрос по wcf, c#, serialization, partial-classes, .net – Переопределить метод ToString в службе WCF

6

Это мой сервис сгенерированный класс:

public partial class MyClass : object, 
                               System.Runtime.Serialization.IExtensibleDataObject, 
                               System.ComponentModel.INotifyPropertyChanged 
{ }

Я пользуюсь своим собственным сервисом. ВMyClass Я переопределилToString() но у меня его нет в моем клиенте. Я хочу либо сгенерировать его, либо какMyClass частично я могу переопределитьToString себя?

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

что я вижу, но как достичь своей цели? levi
WCF создаст прокси-класс на стороне клиента, который имеет тот жеXML signature когда сериализовано / десериализовано - но это делаетNOT & Quot; распространяются & Quot; любые методы (строго только данные - открытые свойства вашего класса) с сервера на клиент. marc_s

Ваш Ответ

2   ответа
6

Если вы определяете как клиента, так и службу, вам не нужно использовать классы, генерирующие WSDL. Переместите общие объекты в отдельную сборку и создайте ссылку на нее из проектов клиента и сервера. Когда вы создаете ссылку на услугу, появляется & quot; расширенный & quot; опция (которая, я думаю, включена по умолчанию), которая повторно использует любые известные классы из WSDL вместо генерации новых.

Более того, если вы переместите контракт на обслуживание в свою общую библиотеку, вам даже не нужно создавать ссылку на сервис, вы можете просто позвонитьChannelFactory непосредственно и исключить весь автоматически сгенерированный прокси-класс.

У меня есть демонстрация того, как сделать обе эти вещи в моем блоге:http://blog.kutulu.org/2012/03/proxy-free-wcf-ditching-proxy.html

Если вы абсолютноneed чтобы использовать WSDL из службы (например, у вас нет контроля над стороной службы, и она может измениться на вас), вы можете расширить частичные классы, которые создает VS (как вы предлагали). Большинство классов автоматической генерации, которые вы получаете от VS в эти дни, являются частичными классами специально для того, чтобы сделать возможным такое расширение. Недостатком, конечно, является то, что ничто не гарантирует, что дополнительные методы частичного класса клиента и сервера одинаковы. Я определенно считаю это последним средством.

Почти все, что VS2010 генерирует автоматически, является частичными классами, поэтому вы можете расширять их по мере необходимости.
Можете ли вы объяснить мне коротко, почему этот сервис генерирует частичный класс? по какой причине? levi
3

Если вы разделяете dll, где переопределяется метод, между клиентским и серверным проектом, вы можете использовать этот метод. По умолчанию WCF генерирует каждый класс с только свойствами, объявленными в интерфейсе службы. Метод не генерируется.

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

Похожие вопросы