使用vb.net向Web服务发送soap请求客户端
我的问题类似于 我想调用一个Web服务,但不像上面的链接所示,我所做的是用wsdl url创建一个服务引用(在一个有按钮点击事件的windows应用程序中) 已创建客户端对象使用vb.net向Web服务发送soap请求客户端,vb.net,wcf,web-services,soap-client,Vb.net,Wcf,Web Services,Soap Client,我的问题类似于 我想调用一个Web服务,但不像上面的链接所示,我所做的是用wsdl url创建一个服务引用(在一个有按钮点击事件的windows应用程序中) 已创建客户端对象 Dim objProxy As MyClient = New MyClient() 我使用以下方法填充了objrequest和objreqheader(分配字符串值而不是xml) 最后,下面的行调用服务 objresponsehead = objProxy.myoperation(objreqheader, objre
Dim objProxy As MyClient = New MyClient()
我使用以下方法填充了objrequest和objreqheader(分配字符串值而不是xml)
最后,下面的行调用服务
objresponsehead = objProxy.myoperation(objreqheader, objrequest, objresp)
从参考vb中,这是myoperation公共函数
Public Function myoperation(ByVal RequestHeader As AFA.RequestHeaderType, ByVal GetTransactionDetailsReq As AFA.GetTransactionDetailsReqType, <System.Runtime.InteropServices.OutAttribute()> ByRef GetTransactionDetailsResp As AFA.GetTransactionDetailsRespType) As AFA.ResponseHeaderType
Dim inValue As AFA.getTransactionDetailsRequest = New AFA.getTransactionDetailsRequest()
inValue.RequestHeader = RequestHeader
inValue.GetTransactionDetailsReq = GetTransactionDetailsReq
Dim retVal As AFA.getTransactionDetailsResponse = CType(Me,AFA.myservice).getTransactionDetails(inValue)
GetTransactionDetailsResp = retVal.GetTransactionDetailsResp
Return retVal.ResponseHeader
End Function
公共函数myoperation(ByVal RequestHeader作为AFA.RequestHeaderType,ByVal GetTransactionDetailsReq作为AFA.GetTransactionDetailsReqType,ByRef GetTransactionDetailsResp作为AFA.GetTransactionDetailsRespType)作为AFA.ResponseHeaderType
Dim inValue As AFA.getTransactionDetailsRequest=新建AFA.getTransactionDetailsRequest()
inValue.RequestHeader=RequestHeader
inValue.GetTransactionDetailsReq=GetTransactionDetailsReq
Dim retVal为AFA.getTransactionDetailsResponse=CType(Me,AFA.myservice)。getTransactionDetails(无效)
GetTransactionDetailsResp=retVal.GetTransactionDetailsResp
返回retVal.ResponseHeader
端函数
问题是我的objresp是空的。没有生成异常,objresponsehead填充为“abcd”。未调用该服务。我不知道如何从app config文件中获取跟踪文件来调试问题。我记得,当我第一次使用它时,得到了一个错误“没有端点侦听可以接受消息”,但是现在没有错误
我在app-config文件中添加了以下内容,以获取跟踪以查看发生了什么。但未看到生成的任何跟踪文件(trace.log)
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add type="System.Diagnostics.TextWriterTraceListener" name="TextWriter" initializeData="trace.log" />
</listeners>
</trace>
</system.diagnostics>
我检查了objProxy的属性,它将基本http绑定作为属性。
有人这样调用服务吗?在soapui中,在我填充请求字段之后,响应很好
如何启用跟踪以查看请求的内容和问题所在。请参阅:
最初我遇到了一个错误序列化消息getTransactionDetailsRequest的正文时出错:“生成XML文档时出错。”。有关更多详细信息,请参阅InnerException。-->System.InvalidOperationException:生成XML文档时出错。-->System.ServiceModel.Diagnostics.PlainXmlWriter+MaxSizeExceedeException“。当我更改大小时,出现错误。”。但是,无法看到生成的任何日志。我之前遇到的问题是响应不符合wsdl。对此,我使用soapui工具中的validate response选项进行了检查。有没有办法在.net客户端中生成与此相关的日志?在我的.net客户端中没有异常,除了响应对象为空,即使我可以在跟踪日志中看到响应xml。我不确定是否有可以打开的开关。请就这个问题单独提问,你可能会得到答案。
Public Function myoperation(ByVal RequestHeader As AFA.RequestHeaderType, ByVal GetTransactionDetailsReq As AFA.GetTransactionDetailsReqType, <System.Runtime.InteropServices.OutAttribute()> ByRef GetTransactionDetailsResp As AFA.GetTransactionDetailsRespType) As AFA.ResponseHeaderType
Dim inValue As AFA.getTransactionDetailsRequest = New AFA.getTransactionDetailsRequest()
inValue.RequestHeader = RequestHeader
inValue.GetTransactionDetailsReq = GetTransactionDetailsReq
Dim retVal As AFA.getTransactionDetailsResponse = CType(Me,AFA.myservice).getTransactionDetails(inValue)
GetTransactionDetailsResp = retVal.GetTransactionDetailsResp
Return retVal.ResponseHeader
End Function
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add type="System.Diagnostics.TextWriterTraceListener" name="TextWriter" initializeData="trace.log" />
</listeners>
</trace>
</system.diagnostics>
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="false"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="false"
maxMessagesToLog="3000"
maxSizeOfMessageToLog="2000"/>
</diagnostics>
</system.serviceModel>