我用这个问题来打扰我的手臂。 我正在寻找一种工具,它可以避免通过自动生成大部分代码来访问Web服务来进行大量编码。
我试图帮助那些使用不支持网络服务的4GL系统的人。但是他们可以访问win32 dll - 这看起来是最简单的解决方案。他们只需要在Web服务上调用一个函数并获得结果。
自从我编写任何C ++以来,这是一段漫长的时间,而我这样做的尝试只是暴露了我的生气。
我已经使用gsoap2工具包和MS的svcutil.exe工具来自动生成代码。
他们做了他们应该做的事情但是,与使用vb.net或c#.net的visual studio中的添加引用工具不同,这些工具包不会生成我设法找到的存根访问类。 相反,它们会为每个方法生成单独的函数调用,并且您必须将它们传递给httpcontexts以及其他一些东西 - 这些我真的不想学习如何为一次性操作。
我想做的是机械:
想法是拥有一个单一功能的dll getws(用户名,密码,网址) 这将返回一个暴露webservices方法的对象 - 一个存根,没有什么聪明。
我知道我在这里抓着稻草但是有人知道避免所有机械工作的工具/方法,并最终得到一个简单的类,我可以修改它来添加身份验证。
webservice有大约30种方法 - 我必须公开它们,每个方法都有一组参数。编写一个存根类来调用gsoap2生成的函数将是一个很多的输入和进入工作/调试的噩梦。 Theres必须是更好的方式。
我想要做的是等效于下面的.net代码 - VS自动生成WS代码。我所要做的就是在课堂上公开它。
Private Shared oWs As WS.publicws = Nothing
Public Shared Function GetWS(ByVal Username As String, ByVal password As String, ByVal URL As String) As WS.publicws
Dim oBinding As New ServiceModel.BasicHttpBinding
If Not oWs Is Nothing Then Return oWs
Dim oEndPoint As New ServiceModel.EndpointAddress(URL)
oBinding.Security.Mode = ServiceModel.BasicHttpSecurityMode.TransportCredentialOnly
oBinding.Security.Transport.Realm = ServiceModel.HttpClientCredentialType.Basic
oWS = New WS.publicws (oBinding, oEndPoint)
oWS.ClientCredentials.UserName.UserName = username
oWS.ClientCredentials.UserName.Password = password
Using scope = New ServiceModel.OperationContextScope(oWs.InnerChannel)
ServiceModel.OperationContext.Current.OutgoingMessageProperties(System.ServiceModel.Channels.HttpRequestMessageProperty.Name) = httpRequestProperty
End Using
Return oWs
End Function