2013-01-16 26 views
1

WCF合同不匹配情况下,我必须托管在2台服务器的WCF服务。有一个名为GetData(param1)的函数。 我改变了这个函数来接受2个参数,即GetData(param1,param2)。 我更新了server1上的服务,并更新了客户端代码。正在工作

一个奇怪的事情正在发生。虽然功能不匹配,但更新后的客户端代码仍然适用于过时的服务。函数被调用并返回结果。如果有帮助,添加的参数是一个枚举值类型。但为什么会有这种非确定性行为?它是如何工作的?

+1

需要看到OperationContract的找出是怎么回事。 –

回答

2

这件事情是,当你设计方法以程序的方式你输入参数默认都是可选的,用默认值填充,如果你不明确指定。假设你有下面签名的方法:

[OperationContract] 
void TestMethod(string param1, int param2); 

你会得到下面的WSDL吧:

<xs:element name="TestMethod"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element minOccurs="0" name="param1" nillable="true" type="xs:string" /> 
     <xs:element minOccurs="0" name="param2" type="xs:int" /> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

正如你所看到的minOccurs属性具有0值,这意味着该元素是可选的。因此,即使在添加新参数后,您的方法仍然可以正常工作,这并不奇怪。

如果你想避免这种行为,试图通过使用MessageContract或至少在包装容器类你参数设计在消息的方式您的合同。并明确指定哪个参数是必需的,以及是否允许通过DataMember属性的默认值。

希望它有帮助!

-1

如果您的服务已安装超过一次的地方更多。重新检查您的端点地址以确保其指向右侧托管的服务器。

相关问题