soap请求客户端使用vb.net进行webservice

时间:2011-12-28 07:40:51

标签: vb.net wcf web-services soap-client

我的问题类似于

How do I send/Receive SOAP messages usiung .NET

我想调用一个web服务,但不像上面链接中显示的那样。我做的是,用wsdl url创建了一个服务引用(在带有按钮点击事件的windows应用程序中)

http://ipaddress:port/My/MyService?wsdl

创建了一个客户端对象

Dim objProxy As MyClient = New MyClient()

我使用以下方法填充了objrequest和objreqheader,(分配字符串值而不是xml)

objreqheader.id = "abcd"

最后,以下行调用服务

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

问题是我的objresp是空的。没有生成异常,objresponsehead填充为“abcd”。该服务未被调用。我不知道如何从应用配置文件中获取跟踪文件,以调试问题。我记得,当我第一次使用它时,得到一个错误“没有可以接受消息的端点侦听”,但是现在没有错误。

我在app配置文件中添加了以下内容以获取跟踪以查看发生了什么。但没有看到生成的任何跟踪文件(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开始,在填充请求字段后,响应很好。

如何启用跟踪以查看请求的内容以及问题所在。

1 个答案:

答案 0 :(得分:2)

请参阅Message Logging

<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>