У меня есть два сервиса WCF в моем проекте. Сервисы разделяют один тип, но каждый сервис генерирует свой собственный тип. Можно ли создать один класс для обеих служб?
Пример кода для серверной части:
[DataContract]
class MyClass { /*some properties*/ }
[ServiceContract]
public interface IService1
{
[OperationContract]
MyClass GetSomeValue();
}
public class Service1 : IService1
{
public MyClass GetSomeValue() { /*some logic*/ }
}
[ServiceContract]
public interface IService2
{
[OperationContract]
MyClass GetSomeOtherValue();
}
public class Service2 : IService2
{
public MyClass GetSomeOtherValue() { /*some logic*/ }
}
На стороне клиента для каждой службы генерируются два "MyClass":
namespace Services.Service1Reference {
[System.SerializableAttribute()]
public partial class RSTRole : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
{
}
а также
namespace Services.Service2Reference {
[System.SerializableAttribute()]
public partial class RSTRole : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
{
}
Это требует нескольких изменений
Вам нужно будет ссылаться на ту же самую фактическую сборку, которая используется для размещения общих объектов (DTO) в двух службах непосредственно в сборке клиента (т.е. Добавить эту сборку в качестве ссылки в тот же проект, к которому вы добавляете ссылки службы WCF). Согласно комментарию Dimitri's
, имеет смысл реорганизовать общие объекты на небольшую сборку, содержащую только DTO, если вы этого еще не сделали.
На клиенте вам нужно будет выбрать " Advanced
при добавлении ссылки на службу, а затем выберите " Reuse Types in Referenced Assemblies
, как показано ниже: