* WCF服务中的结果和* ResultSpecified参数?

时间:2011-03-23 09:29:50

标签: wcf

在我的WCF服务中,我有一个功能,例如:

bool ValidateLogin(string user, string password)

我在windows azure中托管它并将引用添加到我的web应用程序后,该功能变为:

bool ValidateLogin(string user, string password, out int ValidateLoginResult, out bool ValidateLoginResultSpecified)

有谁知道这两个参数是什么?如何在托管后阻止它被添加?

6 个答案:

答案 0 :(得分:6)

将XmlSerializerFormat样式设置为RPC对我来说是个窍门。即

[OperationContract, XmlSerializerFormat(Style = OperationFormatStyle.Rpc)]
bool ValidateLogin(string user, string password)

它改变了wsdl的生成方式,来自:

<wsdl:message name="IService_ValidateLogin_InputMessage">
    <wsdl:part name="parameters" element="tns:ValidateLogin" />
</wsdl:message>
<wsdl:message name="IService_ValidateLogin_OutputMessage">
    <wsdl:part name="parameters" element="tns:ValidateLoginResponse" />
</wsdl:message>

要:

<wsdl:message name="IService_ValidateLogin_InputMessage">
    <wsdl:part name="user" type="xsd:string" />
    <wsdl:part name="password" type="xsd:string" />
</wsdl:message>
<wsdl:message name="IService_ValidateLogin_OutputMessage">
    <wsdl:part name="ValidateLoginResult" type="xsd:boolean" />
</wsdl:message>

本文提出了一个不同的解决方案,但也包含一些额外的解释:http://www.codeproject.com/Articles/323097/WCF-ASMX-Interoperability-Removing-the-Annoying-xx

答案 1 :(得分:4)

显然,这来自WSDL生成器,在这种情况下用于VS 2005的“Add Web Reference ...”选项:

http://devpinoy.org/blogs/cruizer/archive/2008/10/05/some-wcf-gotchas.aspx

MSDN论坛上的答案也暗示了传统支持:

http://social.msdn.microsoft.com/Forums/en/windowsazure/thread/406a6b6b-9dab-469d-ad0f-1f8f95cf0656

所以我的回答是,我猜你的客户端是.NET 2?

答案 2 :(得分:1)

如何将WCF添加到客户端应用程序?这看起来与Azure无关 - 它更多地与您如何定义[DataContract]以及如何将其导入客户端代码有关。

我认为如果您在客户端使用WCF,那么您将看不到这些额外的参数。

在此处查看可能的解释(或可能相关的问题) - http://blogs.msdn.com/b/eugeneos/archive/2007/02/05/solving-the-disappearing-data-issue-when-using-add-web-reference-or-wsdl-exe-with-wcf-services.aspx

答案 3 :(得分:1)

在IService界面上添加或替换以下代码:

[ServiceContract ( Namespace="http://www.yoursite.com/"),XmlSerializerFormat]

Source

答案 4 :(得分:1)

对我来说工作正常如下代码:

[ServiceContract]
[XmlSerializerFormat]
public interface IService1
{
   // do code here
}

答案 5 :(得分:0)

在您的客户端项目中,确保选择“添加服务引用”而不是“添加Web引用”。 “添加服务引用”使用WCF而“添加Web引用”不使用WCF,并通过添加'[paramName]指定的附加参数来补偿可选参数。