寻找一些集体智慧。这是情况。这是使用 Visual Studio 2008。
我们有一个简单的 WCF 合约,它公开了以下方法:
DataSet ExecuteQuery (out string someStuff);
该方法实现为:
public DataSet ExecuteQuery (out string someStuff) { someStuff = "abc"; return new DataSet(); // simplified }
客户端代理由 svcutil 生成,看起来是正确的。
问题:
someStuff
在客户端始终为空。
观察:
- 同样的问题出现在我们的构建机器上。
返回一个字符串而不是 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 参数,我们需要做一些特殊的事情吗?有人遇到过类似的事情吗?
谢谢!!!!