ссылочные методы из интерфейса через службу WCF - PullRequest
2 голосов
/ 30 апреля 2009

Скажите, у меня есть следующее:

namespace SomeProject
{
    public interface ISomething
    {
        string SomeMethod();
    }
}

namespace SomeService
{
    [DataContract]
    public class CompositeType
    {
        [DataMember]
        public ISomething Something { get; set; }
    }
}

Теперь в своем коде вызова я хочу сделать это:

SomeService service = new SomeService();
service.Something.SomeMethod();

SomeMethod() недоступен, если я не верну DataMember в качестве реализации, а не интерфейса. Есть ли способ сделать это?

Ответы [ 4 ]

3 голосов
/ 30 апреля 2009

Ваш WCF "DataContract" - это как раз и есть договор на передачу данных. На стороне клиента у вас есть прокси-объект, который реализует все члены данных, но ни один из методов. Вам нужно будет иметь исходные определения класса / интерфейса и восстановить полный объект на стороне клиента, чтобы сделать что-то подобное.

2 голосов
/ 30 апреля 2009

Это не то, как вы хотите использовать свой сервис WCF. WCF - это передача данных, а не их реализация. Делая это, вы путаете своего клиента и уровни обслуживания.

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

  1. ссылка на "SomeProject" dll в вашем клиенте
  2. добавить ссылку на услугу
  3. выберите «Дополнительно»
  4. Выберите «Повторное использование типов в ссылочных сборках»
  5. Выберите, где вы хотите получить типы из

Опять же, я не рекомендую делать это таким образом.

0 голосов
/ 16 мая 2019

После добавления ссылки на службу необходимо использовать экземпляр клиента, который реализует целевой интерфейс для этой службы.

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

// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    // Other methods are not shown here.
}

Теперь, чтобы использовать его операции, вы просто создаете экземпляр класса, который реализует этот интерфейс, который также был сгенерирован автоматически. Вот пример:

// Create a client object with the given client endpoint configuration.
CalculatorClient calcClient = new CalculatorClient("CalculatorEndpoint"));
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = calcClient.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
0 голосов
/ 30 апреля 2009

Я настоятельно рекомендую вам пройти через некоторые базовые учебные пособия по WCF, чтобы вы могли ознакомиться с тем, что на самом деле делает WCF .

Ознакомьтесь с книгами О'Рейли "Изучение WCF" Мишеля Бустаманте и, что более важно, "Программирование служб WCF 2nd Edition" Ювала Лоуи.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...