Я создал Службу 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, созданное с нуля (только одна форма win, называемая form1). ). На этот раз при добавлении «веб-ссылки» он добавил типичный «локальный», принадлежащий веб-сервисам; Мастер увидел Службу 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).