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