2013-07-19 138 views
14

我使用NSIS构建安装程序,并且作为该安装程序的一部分,我获得了WCF服务(即Url,用户名和密码)的详细信息。我需要验证这些细节。如何在C++中创建Web/wcf服务客户端?

在C#中,我创建服务引用,只需做到以下几点:

var proxy = new ServiceClient(httpsBinding, serviceEndpointAddress); 
proxy.ClientCredentials.UserName.UserName = userName; 
proxy.ClientCredentials.UserName.Password = password; 

try 
{ 
    proxy.Open(); 
} 
catch (EndpointNotFoundException ex) 
{ 
    // Return the end point's not valid 
} 
etc 

现在我需要做的在C++,因此它可以从NSIS叫(我已经调查的调用C#方法从NSIS而且他们似乎都为我想要做的事情做了矫枉过正)。我设法转换生成绑定和终点地址的代码,但是我一直在创建ServiceClient

我添加了一个“Web引用”的项目,但有没有的ServiceClientServiceReference命名空间中的等价物。这:

ServiceReference::ServiceClient ^service = gcnew ServiceReference::ServiceClient(httpsBinding, endpointAddress); 

不作为编译:

'ServiceClient':不是 '服务引用'

那么,如何创建客户端中的一员?

+0

您是否已将“using namespace ServiceMainNamespace”指令与您添加的Web服务相关? – alexbuisson

+0

@alexbuisson - 我似乎无法找到该名称空间。你可以添加一个链接到文档。 – ChrisF

+0

对不起,该命名空间不存在:)这只是一个例子,回想一下在C#中ServiceClient类来自程序集,并且您应该能够找到它的名称。 Thaa程序集应该在你的C++/CLI的参考列表中,并且在使用'ServiceClient'的.cpp文件中,你必须放置一个using指令。就像在C#中一样! – alexbuisson

回答

0

最后我使用了NSIS "Call .NET DLL methods plugin",这对我所需要做的事情来说真的太过于夸张了,但我需要一个可以工作的解决方案,而且我耗尽了时间。

0

你试过gSOAP吗?

http://gsoap2.sourceforge.net/

这是我们用来访问WS *从C++程序是什么。

+0

我并不需要任何复杂的东西。我需要做的就是验证网址,用户名和密码。我不需要获取任何数据。 – ChrisF

0

你可以做一个很好的工作, 创建一个C#DLL,使用regasm来注册这个DLL, 然后你可以在你的C++程序中使用它。

+0

这对于只从安装程序调用一次的东西来说是过度的,只是为了验证帐户的详细信息。 – ChrisF