从MFC表单应用程序调用Web服务器

时间:2014-10-16 14:00:00

标签: c++ visual-c++ mfc

我有简单的Web服务应用程序,使用C#创建。我需要从MFC表单应用程序调用addNumbers方法。最简单的方法是什么?我想我不能期待像C#Web服务客户端应用程序这样的简单方法。

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;
            }
        }
    }

2 个答案:

答案 0 :(得分:3)

Microsoft的REST Services for C++工具包中有大量本机客户端Web调用例程。

Windows Web Services是WCF Web服务的本机等价物,只能用C / C ++编写,所以很多更快更好:)

libCurl是标准的Web调用C库,可用于访问任何Web服务器系统

还有Microsoft's ATL Server也有Web服务客户端例程。将它指向您的wsdl,它将生成客户端代码。

Microsoft的MFC CHtmlView类允许您导航到Web URL。技术上设计用于调用Web服务器并在MFC对话框中显示HTML页面,它仍可用于调用您的Web服务,但您必须解析结果,这取决于您对其进行编码的方式,可能很容易,或者又可能是SOAP。

此外,还有一个来自微软的COM网络服务客户端,但是几年前被弃用的IIRC。

所以是的..通常它就像C#Web服务客户端一样简单。我不知道为什么人们认为它不会!如果你想要一个推荐,我可能会去WWS,因为它被设计成与WCF的东西相同,所以它会起作用。 WCF的SOAP有一个松散的&#39;互操作性政策。

答案 1 :(得分:2)

我一直在使用the C++ REST SDK,而且它一直运作良好。令人惊讶的易于使用,以及其他一些很好的实用程序(即json工具等)。因此,如果您可以使用C#服务支持REST,那么这将是一种简单的方法来连接它们。祝你好运。

代码看起来类似于以下内容:

#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;
}