2012-06-27 3 views
5

Я пишу клиент для доступа к веб-сервису SOAP, который будет размещаться сторонним разработчиком. У меня есть WSDL и XSD, которые определяют интерфейс и данные.Быстрая и простая реализация веб-службы WCF, учитывая wsdl?

У меня не возникло проблемы с созданием ссылки на службу из WSDL, но у меня возникла проблема с созданием простой веб-службы, которая ее реализует, которую я могу использовать для тестирования. (Служба третьей стороны еще не готова, но даже если она работает, я бы все же хотел сделать свое первоначальное тестирование против моего собственного тестового сервера, а не против их.)

Я просматривал и по-видимому, можно использовать SvcUtil для создания интерфейса для службы:

svcutil.exe thewsdl.wsdl thexsd.xsd /language:c# /out:ITestService.cs 

Это создает файл, содержащий определения интерфейса сервиса. Но что теперь?

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

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

The provided URI scheme 'http' is invalid; expected 'https'. 

Что это самый простой способ обойти это? Есть простой способ просто отключить проверку подлинности и авторизацию и просто разрешить неограниченный доступ?

Редакция:

Я добавляет щедроты к этому, как кажется, не привлек никакого внимания оригинальный вопрос.

Но давайте перейдем к делу. Я пытаюсь написать клиент против службы SOAP клиента. В рамках разработки я хочу создать свою собственную тестовую службу WCF, которая реализует тот же WSDL.

Итак, у меня есть загруженный .wsdl-файл и связанный с ним файл .xsd, и с ними я хочу создать службу, с которой я могу протестировать, с отладчиком VS2010.

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

Как туда добраться? Я попытался добавить библиотеку служб WCF, а затем с помощью svcutil.exe внутри нее добавить новую службу, но, похоже, она не заполняет приложение app.config серверным шаблоном, и мои попытки восстановить его Я работал.

+0

искать ФОС 101 о межтрубочные. Необходимо указать основные метаданные конфигурации службы. – Cheeso

+0

Ты почти там. Где-то в вашем app.config вы определяете, что требуется ssl. Публикуйте его здесь, и мы поможем вам отключить его –

ответ

1

Я использовал Moq, чтобы справиться с этим. В основном в модульных тестах вы указываете интерфейс (это было бы сгенерировано для вас с добавлением служебной ссылки или с помощью svcutil) и то, что вы хотите, чтобы оно было возвращено, если вы его вызываете.

Пример настройка ниже:

var mock = new Mock<IFoo>(); 
mock.Setup(foo => foo.DoSomething("ping")).Returns(true); 

Итак, если вы хотите, чтобы MOq вашего вызова службы

var myObject = new IFoo; 
var resp = myObject.DoSomething("whateverwillbeoverriddenbyping"); 

и соответственно будет истинной.

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

+0

+1 за этот отличный ответ. После того, как вы перейдете через все обручи, что WCF предоставит вам, будет объектом, который реализует интерфейс, отражающий поставляемый WSDL. Для тестирования вам не нужен весь WCF guff. Просто издевайтесь над интерфейсом и займитесь созданием своего клиентского приложения. –

+0

Для того, что я делаю, мне нужен фактический сервис WCF.Существует тестирование за пределами модульного тестирования, и для тестов, которые я запускаю, Mocks не будет делать. –

+0

Опубликуйте свои файлы config.serviceModel для служб и клиентов. –

5

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

Выполните следующие действия:

  1. Создать новый «WCF Service Application» Проект
  2. Копирование WSDL и XSD в проект
  3. выберите файл WSDL и посмотреть в разделе Свойства и скопировать расположение от полного пути
  4. Щелкните правой кнопкой мыши по проекту в проводнике решений и выберите «Добавить служебную ссылку ...»
  5. Для служебного адреса вставьте адрес вашего wsdl, который был скопирован в предыдущем шаг и удар. Он должен показывать операции, которые вы ожидаете от службы.
  6. хит нормально
  7. Он должен создавать все объекты для вас, включая интерфейс и конфигурационный файл (хотя в данный момент осуществляется на стороне клиента в CONFIG- нам придется переключиться это будет услуга)
  8. Теперь вам следует добавить раздел конфигурации службы в разделе system.serviceModel. Поскольку я не знаю специфики вашего wsdl, вам нужно создать узел служб внутри секции system.serviceModel и скопировать узел конечной точки из созданного клиентского узла. В приведенном ниже примере узла услуг, вы можете вымарать адрес сейчас:
<system.serviceModel> 
    <services> 
     <service name="YourService"> 
     <endpoint address="" 
       binding="basicHttpBinding" bindingConfiguration="WeatherSoap" 
       contract="ServiceReference1.WeatherSoap" name="WeatherSoap" />  
     </service> 
  1. удалить узел клиента в конфигурации
  2. В службе, он реализует другой интерфейс, когда он генерировал проект, поэтому вы захотите заменить интерфейс, реализованный в том, который указан в атрибуте контракта в конечной точке выше. Затем реализуйте его элементы, и он должен взорвать доступные операции. Вы можете заполнить все, что хотите, чтобы операции службы возвращались.
  3. в зависимости от того, что имеет в WSDL это, мы, возможно, потребуется сделать несколько вещей, чтобы необходимые привязки для запуска - как настройка WsHttpBinding, NetTcpBinding и т.д.
Смежные вопросы