Тип обмена между двумя службами WCF [дубликаты]

1

У меня есть два сервиса 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 
{
}
  • 0
    Просто чтобы подтвердить - вы используете две разные услуги от одного клиента. Сами сервисы имеют общую сборку, и вы хотите, чтобы это было общим для всех трех систем?
  • 0
    Да ты прав
Показать ещё 4 комментария
Теги:
wcf

1 ответ

1

Это требует нескольких изменений

  1. Вам нужно будет ссылаться на ту же самую фактическую сборку, которая используется для размещения общих объектов (DTO) в двух службах непосредственно в сборке клиента (т.е. Добавить эту сборку в качестве ссылки в тот же проект, к которому вы добавляете ссылки службы WCF). Согласно комментарию Dimitri's, имеет смысл реорганизовать общие объекты на небольшую сборку, содержащую только DTO, если вы этого еще не сделали.

  2. На клиенте вам нужно будет выбрать " Advanced при добавлении ссылки на службу, а затем выберите " Reuse Types in Referenced Assemblies, как показано ниже:

Изображение 174551

  • 0
    Я пытался таким образом, но не сработало. Попробую еще раз.
  • 0
    Важно, чтобы время выполнения .Net было одинаковым на сервере и клиенте. Если сборка DTO имеет другие ссылки, их нужно будет добавить к ссылкам клиента (следовательно, попробуйте сделать их как POCO, насколько это возможно)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню