Я разрабатываю службу WCF с использованием VSTS 2008 +.Net 3.5 + С#, и он отлично работает, когда я также использую VSTS 2008 для разработки клиента (с помощью функции Add Service Reference для автоматически созданного прокси-кода веб-служб клиента). Разработанный WCF использует basicHttpBinding.
Проблема, с которой я столкнулся, заключается в том, что когда я использую Visual Studio.Net(Visual Studio 2003) для создания прокси-кода клиентских веб-сервисов, есть дополнительный входной параметр для метода OperationContract с именем IdSpecified (тип bool). Я проверил, что при указании IdSpecified в true значение параметра Id будет правильно передано на сервер WCF, но когда я укажу IdSpecified на false, независимо от того, какие значения я укажу для параметра Id, на стороне сервера WCF, Id будет всегда 0. Я также пробовал использовать тип входного параметра типа string, на стороне клиента нет такого дополнительного параметра ввода.
Мой вопрос в том, почему есть дополнительный параметр? В чем его смысл и возможно ли избежать создания такого дополнительного параметра?
Здесь Visual Studio.Net автоматически создает прокси-код веб-служб на стороне клиента,
public StudentInfo Poll(int Id, [System.Xml.Serialization.XmlIgnoreAttribute()] bool IdSpecified)
Вот мой код сервера VSTS 2008 WCF,
[OperationContract]
StudentInfo Poll(int Id);
EDIT 1: вот часть автоматически сгенерированного кода на стороне клиента относительно метода опроса.
[return: System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public StudentInfo Poll(int Id, [System.Xml.Serialization.XmlIgnoreAttribute()] bool IdSpecified) {
object[] results = this.Invoke("Poll", new object[] {
Id,
IdSpecified});
return ((StudentInfo)(results[0]));
}