Добавление ссылки на услугу wcf - PullRequest
0 голосов
/ 13 февраля 2019

Проблема уже обсуждалась здесь, но она не решала ее так, как я ищу.

Я уже создал ссылку на службу из приложения консоли клиента в Visual Studio, но я хочу сделать это программно со следующим ограничением:

Из Документы Microsoft - wcf очевидно, что мы должны иметь ссылку на интерфейс службы, доступную для клиента.В моем случае у меня есть доступная ссылка, вместо этого у меня есть адрес, на котором размещена служба, и этот адрес является динамическим.

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

public partial class CalculatorServiceClient : System.ServiceModel.ClientBase<ICalculatorService>, ICalculatorService  
{  

}

Как видно, ICalculatorService доступен при определении класса.Что делать, если интерфейс к службе недоступен при определении класса.

1 Ответ

0 голосов
/ 14 февраля 2019

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

Идея проста.

Создание контракта на обслуживание, соответствующего реализации вашего сервиса

[DataContract]
public class SomeDataContarctClass
{
   [DataMember]
   public string SomeMember{get;set;}
   etc....
}

Создание интерфейса

public IServiceInterface
{
    [OperationContract]
    List<SomeDataContarctClass> GetSomeData();
    ...etc
}

Теперь это место, где вы начинаете склеивать вещи,

Затем создайте услугу

public IServiceInterface CreateIService()
        {
            EndpointAddress myEndpoint = new EndpointAddress("SERVICE URL");
            BasicHttpBinding binding= new BasicHttpBinding();
                defaultBinding.MaxReceivedMessageSize = 2147483647;
                defaultBinding.MaxBufferPoolSize = 2147483647;
                defaultBinding.MaxBufferSize = 2147483647;
                defaultBinding.ReaderQuotas.MaxArrayLength = 2147483647;
                defaultBinding.ReaderQuotas.MaxStringContentLength = 2147483647;
            ChannelFactory<IUpdaterService> myChannelFactory = new ChannelFactory<IServiceInterface>(binding, myEndpoint);
            myChannelFactory.Endpoint.EndpointBehaviors.Add(new ServiceInterceptionBehavior());
            // Create a channel.
            return myChannelFactory.CreateChannel();
        }

Затем вы можете позвонить в службу, используя

var myserviceImp = CreateIService();
var data = myserviceImp.GetSomeData();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...