Web服务抛出异常并且不返回响应

时间:2013-08-06 19:48:12

标签: wcf web-services exception

我正在从控制台应用程序中调出一个Web服务(https://gw.sam.gov/epls/services/EPLSSearchWebService?wsdl)。我只需要使用SSN和Name运行“doSsnSearch”并确认是否有成功的返回结果。在我的30条测试记录中的29条中,没有返回任何内容,但是当存在有效响应时,该服务会抛出异常并且永远不会返回响应。例外情况如下:

Error in deserializing body of reply message for operation 'doSsnSearch'.

内部例外是:

{"Cannot assign object of type System.String[] to an object of type System.String."}

我正在使用服务引用来添加WSDL,并尝试增加readerquotas中所有内容的大小以及我在配置端可以想到的所有其他内容。最糟糕的部分是我之前修好过,但现在我忘了我做了什么:\

我已经确认Web服务调用与我通过使用SoapUI提供的数据一起工作,我能够得到有效的响应。

这是调用代码:

var client = new EPLSSearchWebServiceClient();
var query = new OperationSsnSearch 
{
  exactName = "XXX",
  ssnOrTin = "xxxxxxxxx"
};

var response = Client.doSsnSearch(query);  <--- exception is thrown here

这是我的app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="EPLSSearchWebServiceSoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="999999" maxBufferPoolSize="999999" maxReceivedMessageSize="999999" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
      <readerQuotas maxDepth="999999" maxStringContentLength="999999" maxArrayLength="999999" maxBytesPerRead="999999" maxNameTableCharCount="999999" />
      <security mode="Transport" />
    </binding>
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="https://gw.sam.gov/epls/services/EPLSSearchWebService" binding="basicHttpBinding" bindingConfiguration="EPLSSearchWebServiceSoapBinding"
            contract="SAMWebServices.EPLSSearchWebService" name="EPLSSearchWebService"/>
</client>
</system.serviceModel>
...

非常感谢任何建议。

由于

编辑:这是我正在调用的服务主体:

 public SAM_Caller.Console_App.SAMWebServices.EPLSSearchResponse doSsnSearch(SAM_Caller.Console_App.SAMWebServices.OperationSsnSearch query) {
        SAM_Caller.Console_App.SAMWebServices.doSsnSearchRequest inValue = new SAM_Caller.Console_App.SAMWebServices.doSsnSearchRequest();
        inValue.query = query;
        SAM_Caller.Console_App.SAMWebServices.doSsnSearchResponse retVal = ((SAM_Caller.Console_App.SAMWebServices.EPLSSearchWebService)(this)).doSsnSearch(inValue);
        return retVal.doSsnSearchReturn;
    }

2 个答案:

答案 0 :(得分:1)

异常显然是在陈述您的问题。您尝试将String数组分配给String。请检查您执行此任务的代码。
很可能函数调用返回一个String数组,所以首先检查该函数的返回类型。 检查您分配给响应的内容。

我并不完全知道您编写的语言,但告诉您最简单的方法,您可以参考。如果你解决这个问题,我会非常高兴b只检查这个最简单的事情。

答案 1 :(得分:1)

您应该获得有关错误发生位置的更具体信息。是在服务器端还是客户端? (我假设客户)。客户端是否发送请求并获得响应(使用fiddler进行检查)或者在发送内容之前是否发生了错误?

接下来,您要确保已从最新的WSDL版本生成代理。自生成代理服务器以来,服务器可能已发生更改,因此您应该发布更新。

最后,这可能是WCF代理生成中的错误。如果你不能用我以前的建议解决它,那么请在这里发布响应soap和服务代理的代码(reference.cs)。

相关问题