Мастер прокси WCF - PullRequest
       15

Мастер прокси WCF

0 голосов
/ 18 мая 2011

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

Создано круто. Но только мелочь беспокоит меня.

Дело, которое я хочу, имеет IP-адрес в качестве имени службы. Но на самом деле есть мое имя машины. Кратко

У меня http://mycomputer/blabla на разных сайтах после генерации

Но мне нужно вот так: http://93.48.56.74/blabla, где 93.48.56.74 - это IP-адрес моего компьютера, на котором я его генерирую.

Как это решить?

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Причина, по которой оно использует имя вашего компьютера, заключается в том, что это адрес, объявленный в сгенерированном WSDL.Как уже было сказано, вы можете просто изменить свой Web.config или App.config, и он будет использовать IP-адрес.

Вот вам и простой ответ :) Или вы можете изменить WSDL.Если вы используете .NET 4.0 *, вы можете применить поведение <useRequestHeadersForMetadataAddress> к конфигурации службы.

После добавления поведения метаданные службы будут объявлять ту же конечную точкуадрес, который вы используете для получения WSDL.Таким образом, если вы добавите ссылку на службу в http://93.48.56.74/blabla,, то для созданного прокси-сервера и конфигурации следует использовать IP-адрес, а не имя хоста.

*: для .NET 3.5 доступно также исправление:1012 * KB971842 (не обращайте внимания на описание исправления)

1 голос
/ 18 мая 2011

Обычный подход заключается в настройке вашего клиента с использованием файла конфигурации и указании имени сервера или IP-адреса в соответствии с вашими потребностями.

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

В этом случае у вас есть два подхода:

  • Вы можете инициализировать клиент и установить параметры (включая URL-адрес службы) программно.
  • Вы можете выбратьперезаписать имя сервера в вашем файле hosts, чтобы он указывал на нужный IP-адрес.

Самый правильный способ - выполнить инициализацию программно.Конкретное зависит от вашей реализации, но вот пример использования службы EchoService.Это, вероятно, может быть упрощено;Я скопировал и вставил из инициализации теста, где мне нужен работающий хост.

    public void SetUp()
    {
        // the service address
        var baseAddress = new Uri("http://127.0.0.1:3123/");

        host = new WebServiceHost(typeof(EchoService), baseAddress);

        ServiceEndpoint sep = host.AddServiceEndpoint(typeof(IEchoService), new WebHttpBinding(), "");
        sep.Behaviors.Add(new WebHttpBehavior());

        echoFactory = new ChannelFactory<IEchoService>(new WebHttpBinding(), sep.Address);
        echoFactory.Endpoint.Behaviors.Add(new WebHttpBehavior());

        client = echoFactory.CreateChannel(sep.Address, baseAddress);
    }
...