在我的WCF服务中,我有一个功能,例如:
bool ValidateLogin(string user, string password)
我在windows azure中托管它并将引用添加到我的web应用程序后,该功能变为:
bool ValidateLogin(string user, string password, out int ValidateLoginResult, out bool ValidateLoginResultSpecified)
有谁知道这两个参数是什么?如何在托管后阻止它被添加?
答案 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]
答案 4 :(得分:1)
对我来说工作正常如下代码:
[ServiceContract]
[XmlSerializerFormat]
public interface IService1
{
// do code here
}
答案 5 :(得分:0)
在您的客户端项目中,确保选择“添加服务引用”而不是“添加Web引用”。 “添加服务引用”使用WCF而“添加Web引用”不使用WCF,并通过添加'[paramName]指定的附加参数来补偿可选参数。