2014-10-16 4 views
2

У меня есть простая веб-служба, созданная с помощью C#. Мне нужно вызвать метод addNumbers из приложения формы MFC. Какой самый простой способ сделать это? Полагаю, я не могу рассчитывать на простой способ, как клиентское приложение веб-сервиса C#.Позвонить веб-сервер из приложения формы MFC

namespace WebApplication 
{ 
    /// <summary> 
    /// Summary description for WebService1 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService] 
    public class WebService1 : System.Web.Services.WebService 
    { 

     [WebMethod] 
     public string HelloWorld() 
     { 
      return "Hello World"; 
     } 

     [WebMethod] 
     public double addNumbers(double value1, double value2) 
     { 
      return value1 + value2; 
     } 
    } 
} 

    namespace WebApplication 
    { 
     /// <summary> 
     /// Summary description for WebService1 
     /// </summary> 
     [WebService(Namespace = "http://tempuri.org/")] 
     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
     [System.ComponentModel.ToolboxItem(false)] 
     // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
     // [System.Web.Script.Services.ScriptService] 
     public class WebService1 : System.Web.Services.WebService 
     { 

      [WebMethod] 
      public string HelloWorld() 
      { 
       return "Hello World"; 
      } 

      [WebMethod] 
      public double addNumbers(double value1, double value2) 
      { 
       return value1 + value2; 
      } 
     } 
    } 
+0

посмотреть на этот ответ: http://stackoverflow.com/questions/10106816/how-to-contruct-httpsendrequest-method-of-wininet/ 10133408 # 10133408, вы должны уметь его использовать для своих нужд – marcinj

ответ

3

Существует REST Services for C++ инструментария Microsoft, который имеет много родных сторону клиента веб-призывающие процедуры.

Существует Windows Web Services, что является родным эквивалентом веб-службы WCF, только написана на C/C++ поэтому его гораздо быстрее и лучше :)

Существует libCurl, что является стандартным веб-вызова библиотеки C и может использоваться для доступа к любой системе веб-сервера

Существует Microsoft's ATL Server, который также имеет процедуры обслуживания веб-служб. Направьте его на свой wsdl, и он будет генерировать код клиента.

Существует класс Microsoft MFC CHtmlView, который позволяет вам перемещаться по веб-URL. Технически разработанный для вызова веб-серверов и отображения HTML-страниц в диалоговом окне MFC, он все равно может использоваться для вызова вашего веб-сервиса, но вам придется анализировать результат, который зависит от того, как вы его закодировали, может быть легко или снова это может быть SOAP.

Существует также клиент COM-сервисов COM от Microsoft, но IIRC, который устарел несколько лет назад.

Так что да .. в целом это так же просто, как клиент веб-служб C#. Я не знаю, почему люди думают, что этого не будет! Если вам нужна рекомендация, я, вероятно, поеду на WWS, поскольку она предназначена для того, чтобы быть идентичной с материалом WCF, поэтому она будет работать. SOAP WCF имеет «свободную» политику в отношении функциональной совместимости.

2

Я использую the C++ REST SDK, и он работает очень хорошо. Удивительно проста в использовании и несколько других полезных утилит (т. Е. Json tools и т. Д.). Итак, если вы можете поддерживать REST с помощью своих C# -сервей, это будет простой способ подключить их. Удачи.

Код будет выглядеть примерно следующим образом:

#include <windows.h> 
#include "cpprest\json.h" 
#include "cpprest\http_client.h" 

pplx::task<void> _CallService() 
{ 
    web::http::client::http_client client { U("http://localhost:8080") }; 
    return client.request(web::http::methods::GET, U("service_name/foo")).then([&](web::http::http_response response) 
    { 
     auto status { response.status_code() }; 
     int bodyLength = response.headers().content_length(); 
    }); 
} 

int main() 
{ 
    Concurrency::task<void> t = _CallService(); 
    t.wait(); 
    return 0; 
} 
+0

- это так же просто, как и C# -клиент? ... нет, это выглядит проще! – gbjbaanb

+0

@gbjbaanb - :) Я оценил ваш ответ. Я потратил некоторое время на некоторые из ссылок, которые вы предоставили. +1 за это! – Jeff

Смежные вопросы