2014-12-17 7 views
0

Я в тупике, вероятно, из-за того, что не понимаю что-то о мыльных сервисах. Когда я создаю ссылку на службу к текущей общественности x12 документов здравоохранения интерфейс службы представления:Создайте клиента клика для мыла из wsdl без каких-либо договорных методов

http://www.caqh.org/SOAP/WSDL/CORERule2.2.0.xsd 

Я получаю некоторые классы, которые определяют то, что тело сообщения мыла может быть, но я не могу получить клиент прокси генерируется ,

Я хотел бы построить мой клиент с WCF, но в каждом примере, который я нахожу, у них есть существующий контракт для создания прокси. У меня нет такой роскоши. Функции для службы вызываются с помощью мыльного действия.

Я могу вручную сгенерировать вызов с кодом, похожим на this post, но вызов всегда отклоняется, так как «nonce is expired».

Примеры для WCF имеют хороший контракт в WSDL, поэтому кажется простым, но это бесполезный код, поскольку я не могу создать какой-либо интерфейс (автоматически). Например, Rick Strahl's blog post отвечает на многие вопросы и кажется отличным , если у вас есть контрактное сообщение для звонка. Я хотел бы следовать его подходу, но я был в тупике по созданию клиента (правильно)!

Итак, я могу построить унаследованный мыльный клиент с WSE 3, с руководством here from MSDN, но разве мы не должны использовать WCF сейчас? Даже теги, которые публикуются здесь, говорят, что WSE - это последний вариант.

У меня что-то про создание прокси-сервера клиента?

Итак, мой вопрос сводится к следующему: Как создать прокси-сервер для веб-службы для мыльной службы без контрактов в WCF?

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

[EDIT: еще одна мысль. Могу ли я создать свой собственный вручную контракт и таким образом создать прокси-сервер с этим? Не уверен, что эффекта на выходе XML на веб-service..ie мыло, будет вызов выглядеть нормально]

+0

Вам нужен WSDL, и никогда не использовать WSE. Для вызова службы XSD недостаточно. –

+0

Только что поставляемый комплект WSDL I поставляется. Если я положил? Wsdl после сайта поставщика, я получаю сообщение «Ошибка: общая ошибка. Не удалось создать WSDL!» Поставщик создает веб-службу Axis2 –

+0

Я создал образец проекта, чтобы продемонстрировать вам решение, см. Мой отредактированный ответ – polacekpavel

ответ

1

Вы можете проверить мой пример проекта для этого WSDL https://bitbucket.org/polacekpavel/servicestacksample/src

Или вы можете использовать ChannelFactory для этого http://msdn.microsoft.com/library/ms576132(v=vs.110).aspx Предположим, что у вас есть этот интерфейс - измените его на реальный.

[ServiceContract]    
public interface IMathService 
{ 
    [OperationContract] 
    int Add(int a,int b); 
} 

, то вы можете вызвать его во время выполнения с пользовательской конфигурации ABC (адрес, обязывающего, контракта)

//define binding 
    //assume your binding using basicHttp, change it if you are using something else 
    BasicHttpBinding myBinding = new BasicHttpBinding();   

    //define endpoint url (where service is deployed) 
    EndpointAddress myEndpoint = new EndpointAddress("http://localhost:11234/MathService.svc"); //change to real endpoint 

    //Use channel factory instead of generated one 
    ChannelFactory<IMathservice> myChannelFactory = new ChannelFactory<IMathservice>(myBinding, myEndpoint); //Change to you WCF interface 
    IMathservice mathService= myChannelFactory.CreateChannel(); 

    //and call it    
    var result = mathService.Add(1,1); //input to your method 

    ((IClientChannel)mathService).Close(); 
    myChannelFactory.Close(); 
+0

Это предполагает, что он знает контракт. Все, что у него есть, - это XSD, описывающий форматы сообщений. Это не контракт. –

+0

Я думаю, что формат сообщения находится по адресу http://www.caqh.org/SOAP/WSDL/CORERule2.2.0.wsdl, и есть описания типов данных http://www.caqh.org/SOAP/WSDL/CORERule2.2.0 .xsd, поэтому я думаю, что достаточно информации для вызова – polacekpavel

+0

Затем OP должен использовать «Добавить ссылку на службу» и обратиться к WSDL. –