robinzonejob
@robinzonejob
разработчик .NET

Как запускать методы одного WCF сервиса из другого?

Только начал изучать WCF-сервисы.
Суть задачи состоит в следующем:
Есть сайт, который должен обращаться к методам уже существующего сервиса - А, но делать это напрямую он не может.
Для этого нужно создать сервис посредник - Б, чьи методы - просто должны запускать методы сервиса А и возвращать результат сайту.

Я начал с того, что добавил ссылку на wsdl-файл сервиса А в проект, где будет находится сервис Б
5a6dec47c3f90777378615.png

Дальше создал новый сервис, добавив в проект новый svc файл и интерфейс, описывающий все его методы.
Потом добавил в новом сервисе ссылку на сервис А и в конструкторе нового сервиса создаю экземпляр его клиента (чтобы через него обращаться к его методам)

5a6ded371cad0910014004.png

При попытке запустить этот новый сервис получаю ошибку о конфликте имен
5a6ded90ddf04059792910.png

Возможно я изначально подхожу совершенно не правильно к задаче и не понимаю сути WCF, был бы рад, если вы подскажете в каком направлении двигаться.
  • Вопрос задан
  • 246 просмотров
Пригласить эксперта
Ответы на вопрос 1
@PushMeNow
.NET Developer
если я не ошибаюсь нужно в конструктор передать строку endpoint иначе сервис не заведётся. Сам я сервисы не создавал, но опыт подключения к проекту mvc есть. при подключении к проекту в файле web.config создаётся блок типа:
<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="TubeServiceSoap" maxBufferSize="" maxReceivedMessageSize="" sendTimeout="00:05:00" />
      </basicHttpBinding>
      <customBinding>
        <binding name="TubeServiceSoap12">
          <textMessageEncoding messageVersion="Soap12" />
          <httpTransport />
        </binding>
      </customBinding>
    </bindings>
    <client>
      <endpoint address="путь к сервису" binding="basicHttpBinding" bindingConfiguration="TubeServiceSoap" contract="TubeServiceSlezhLVL2.TubeServiceSoap" name="TubeServiceSoap" />
      <endpoint address="путь к сервису" binding="customBinding" bindingConfiguration="TubeServiceSoap12" contract="TubeServiceSlezhLVL2.TubeServiceSoap" name="TubeServiceSoap12" />
    </client>
  </system.serviceModel>

в блоке client как раз таки указан тот endpoint (name). Далее в инициализацию сервиса нужно передать эту строку. попробуйте поискать в конфигурациях проекта.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы