集合知を探しています。これが状況です。これは Visual Studio 2008 を使用しています。
次のメソッドを公開する単純な WCF コントラクトがあります。
DataSet ExecuteQuery (out string someStuff);
このメソッドは次のように実装されます。
public DataSet ExecuteQuery (out string someStuff) { someStuff = "abc"; return new DataSet(); // simplified }
クライアント側のプロキシは svcutil によって生成され、正しいように見えます。
問題:
someStuff
クライアント側では常に null です。
所見:
- ビルド マシンでも同じ問題が発生します。
DataSet の代わりに文字列を返すと、クライアント プロキシは out パラメータの適切な値を受け取ります。
public string ExecuteQuery(out string someStuff) ...
クライアント プロキシを完全に削除して再生成しても効果はありません。
- トレース ログに示されているように、クライアントは確実に DataSet と「out」文字列の両方を受け取ります。
<ExecuteQueryResponse xmlns="http://tempuri.org/">
<ExecuteQueryResult>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded"></xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"></diffgr:diffgram>
</ExecuteQueryResult>
<someStuff>abc</someStuff>
</ExecuteQueryResponse>
クライアント プロキシがコードを生成する方法は次のとおりです。
[System.ServiceModel.OperationContractAttribute (Action="http://tempuri.org/IQueryContract/ExecuteQuery", ReplyAction="http://tempuri.org/IQueryContract/ExecuteQueryResponse")] [System.ServiceModel.XmlSerializerFormatAttribute()] System.Data.DataSet ExecuteQuery(out string someStuff);
- netTcpBinding を使用します
DataSet と out パラメータを返すために何か特別なことをする必要がありますか? 誰かが似たようなものに出くわしましたか?
ありがとう!!!!