2011-12-28 118 views
1

我的问题是类似SOAP请求客户端web服务用vb.net

How do I send/Receive SOAP messages usiung .NET

我想调用Web服务,但不喜欢的链接显示above.What我所做的就是,创建方式与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,这是我的手术公共职能

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”。该服务未被调用。我不知道如何从应用程序配置文件中获取跟踪文件,以调试问题。我记得,当我第一次使用它时,出现了一个错误“没有可以接受消息的端点监听”,但现在没有错误。

我在应用程序配置文件中添加了以下内容以获取跟踪信息,以了解发生了什么。但没有看到任何生成的跟踪文件(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,响应是好的,我填充请求字段。

如何启用跟踪以查看请求将要发送的内容以及问题的位置。

回答

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

起初,我得到了一个错误“了。在序列化消息getTransactionDetailsRequest的身体一个错误:‘有一个错误生成XML文档。’请参阅的InnerException更多细节 - 。 - > System.InvalidOperationException:生成XML文档时发生错误---> System.ServiceModel.Diagnostics.PlainXmlWriter + MaxSizeExceededException“。当我改变大小时,错误消失。但是,无法看到生成的任何日志。 – Suresh 2011-12-28 12:17:26

+0

忽略我上面的评论。 – Suresh 2011-12-29 09:28:31

+0

我以前遇到的问题是响应不符合wsdl。这个,我使用soapui工具中的验证响应选项进行检查。有没有什么办法可以在.net客户端中生成与此相关的日志?除了响应对象为空,即使我能在跟踪日志中看到响应xml,我的.net客户端中也没有例外。 – Suresh 2011-12-29 15:57:56