Я создал службу WCF по умолчанию в VS2008. Он называется "Service1"
public class Service1 : IService1
{
public string GetData( int value )
{
return string.Format("You entered: {0}", value);
}
public CompositeType GetDataUsingDataContract( CompositeType composite )
{
if ( composite.BoolValue )
{
composite.StringValue += "Suffix";
}
return composite;
}
}
Он отлично работает, интерфейс IService1:
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData( int value );
[OperationContract]
CompositeType GetDataUsingDataContract( CompositeType composite );
// TODO: Add your service operations here
}
Это все по умолчанию; Visual Studio 2008 создала все это.
Затем я создал простое приложение Winforms, чтобы "проверить" это. Я добавил ссылку на службу к моей вышеупомянутой службе, и все это работает. Я могу установить и вызвать myservice1.GetData(100); и я получаю результат.
Но мне сказали, что эта услуга должна быть использована приложением Winforms.NET 2.0 через веб-службы, поэтому я приступил к добавлению ссылки на новое приложение Winforms.NET 2.0, созданное с нуля (только одна winform с именем form1). На этот раз, добавив "веб-ссылку", он добавил типичный "localhost", принадлежащий веб-сервисам; мастер увидел службу WCF (работает на фоне) и добавил ее.
Когда я попытался использовать это, я узнал, что метод GetData (int) теперь был GetData (int, bool).
Здесь код
private void button1_Click( object sender, EventArgs e )
{
localhost.Service1 s1 = new WindowsFormsApplication2.localhost.Service1();
Console.WriteLine(s1.GetData(100, false));
}
Обратите внимание на ложь в вызове GetData?
Я не знаю, что это за параметр или откуда это произошло, он называется "bool valueSpecified".
Кто-нибудь знает, откуда это происходит? Что-нибудь еще, что я должен сделать, чтобы использовать службу WCF как WebService из .NET 2.0? (WinForms).