使用 gSOAP 连接到 WCF Web 服务

Posted

技术标签:

【中文标题】使用 gSOAP 连接到 WCF Web 服务【英文标题】:Connecting to WCF web service using gSOAP 【发布时间】:2010-12-25 15:55:52 【问题描述】:

我正在编写一个简单的 cmd 客户端来尝试使用我开发的 WCF Web 服务,以便测试如何使用非托管 C++ 连接到 Web 服务。

我一直在按照本教程http://www.blinnov.com/en/2008/01/22/wcf-service-unmanaged-client/ 一步步进行操作,但仍然无法成功使用该服务。

#include "BasicHttpBinding_USCOREIService1.nsmap"
#include "soapBasicHttpBinding_USCOREIService1Proxy.h"
#include <iostream>
#include <string>

using namespace std;


int main(int argc, char **argv)

BasicHttpBinding_USCOREIService1Proxy myProxy;
static const char* const endPoint = "http://localhost:50181/Service1.svc";

myProxy.soap_endpoint = endPoint;
_ns1__GetData param;
_ns1__GetDataResponse response;
param.fileName = &std::string("house.ifc");

if ( myProxy.GetData(&param, &response) == SOAP_OK) 
    cout << "Hello" << endl; //Succeeded

else 

    myProxy.soap_stream_fault(std::cerr);

return 0;

它总是给我 错误 415 错误:SOAP-ENV:Server[no subcode] “HTTP 错误” 详细信息:HTTP/1.1 415 不支持的媒体类型 我整天都在努力完成它,但仍然没有什么新鲜事。 :(

【问题讨论】:

我不知道问题出在哪里?我已经按照教程中的说明使用了 BasicHttpBinding,但仍然出现相同的消息。有没有其他方法可以实现,使我能够使用非托管 C++ 连接到 WCF Web 服务? 【参考方案1】:

这是因为 gSOAP 客户端和 WCF 服务不能很好地与 SOAP 1.2 配合使用。 如果您使用带有“-1”开关的 soapcpp2 来强制 SOAP 1.1,它将起作用。

我已经在 Ubuntu 上使用 gSOAP 2.8.4 对其进行了测试,并且可以正常工作。

【讨论】:

【参考方案2】:

如果您的客户端将安装在 windows 机器上,最好的方法是使用 C++\CLI 网桥连接您的客户端和托管生成的代理,这是唯一适用于所有类型 wcf 绑定(HTTP、 TCP,MSMQ,...)。

如果您选择其他库,请确保它仅适用于 HTTP 绑定。

【讨论】:

感谢您的建议。但我在该链接的最后一篇文章中找到了解决方案social.msdn.microsoft.com/Forums/en-US/wcf/thread/…

以上是关于使用 gSOAP 连接到 WCF Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

使用?wsdl URI查询将LinqPad连接到WCF Web服务

尝试将 ASP.NET CORE 2 Web API 应用程序连接到 WCF 服务

WCF 连接到 Websocket 服务器

有没有办法让客户端连接到现有的 WCF Web Http 服务而不使用 .Net Core 2 中的 WebHttpBinding?

无法连接到远程服务器 wcf服务

C#如何强制等待连接到 WCF 服务