【问题标题】:Call web server from MFC form application从 MFC 表单应用程序调用 Web 服务器
【发布时间】:2014-10-16 13:59:59
【问题描述】:

我有简单的 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;
            }
        }
    }

【问题讨论】:

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


【解决方案1】:

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

Windows Web Services 是 WCF Web 服务的本机等价物,仅用 C/C++ 编写,因此它更多更快更好:)

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

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

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

还有一个来自 Microsoft 的 COM Web 服务客户端,但 IIRC 在几年前就被弃用了。

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

【讨论】:

    【解决方案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;
    }
    

    【讨论】:

    • 这和 C# 客户端一样简单吗?...不,看起来更简单!
    • @gbjbaanb - :) 感谢您的回答。我花了一些时间在您提供的一些链接上。为此 +1!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多