Сгенерированный вами прокси был (по всей вероятности) создан до изменения и не регенерирован после него. Таким образом, прокси «жестко закодировал» параметры на основе WSDL (я предполагаю, что вы используете SOAP). Вот пример сообщения SOAP (взято с этого сайта ).
<?xml version='1.0'?>
<SOAP:Envelope
xmlns:SOAP='urn:schemas-xmlsoap-org:soap.v1'>
<SOAP:Body>
<i:getBalance
xmlns:i='urn:develop-com:IBank'>
<account>23619-22A</account>
</i:getBalance>
</SOAP:Body>
</SOAP:Envelope>
В этом случае метод getBalance ожидает параметр account. Если это изменится на стороне сервера, и клиент не получит новый контракт и не восстановит прокси, он не сможет отправить правильный параметр.
Обратите внимание, что если вам нужно для внесения таких изменений в ваш код без нарушения договора, вы можете применить MessageParameterAttribute к параметру следующим образом:
[OperationContract(Name = "SubscribeWcfProvider")]
bool Subscribe([MessageParameter(Name = "subscriptionid")]Guid subscriberId);
На MSDN есть хороший пример, который показывает код, который вам нужно отредактировать, а также сообщение, которое будет отправлено.
Я рекомендую вам взглянуть на сгенерированный WSDL вашего сервиса, чтобы увидеть в действии, что происходит за кулисами.