14

我正在使用 NSIS 构建安装程序,作为该安装程序的一部分,我获得了 WCF 服务的详细信息(即 URL、用户名和密码)。我需要验证这些细节。

在 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 调用它(我已经研究了从 NSIS 调用 C# 的方法,它们似乎对于我想要做的事情来说都是多余的)。我已经设法转换了生成绑定和端点地址的代码,但是我一直坚持创建ServiceClient.

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

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

不编译为:

“ServiceClient”:不是“ServiceReference”的成员

那么如何创建客户端呢?

4

3 回答 3

0

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

于 2013-07-31T11:27:51.050 回答
0

最后,我使用了 NSIS “调用 .NET DLL 方法插件”,这对于我需要做的事情来说实在是太过分了,但我需要一个有效的解决方案,但我没时间了。

于 2013-09-02T10:42:04.440 回答
0

你试过gSOAP吗?

http://gsoap2.sourceforge.net/

这就是我们用来从 C++ 程序访问 WS* 的方法。

于 2013-07-25T20:02:08.597 回答