コンソール アプリケーションからWeb サービス ( https://gw.sam.gov/epls/services/EPLSSearchWebService?wsdl )を呼び出しています。SSN と名前を指定して「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 内のすべてのサイズと、構成の最後で考えられるすべてのサイズを増やしてみました。これの最悪の部分は、以前に修正したことですが、今は何をしたか忘れてしまいました:\
SoapUI を使用して提供しているデータで Web サービス呼び出しが機能し、有効な応答を取得できることを確認しました。
呼び出しコードは次のとおりです。
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;
}