2009-02-10 5 views
10

Ho creato il servizio WCF predefinito in VS2008. Si chiama "Service1"WCF consumato come WebService aggiunge un parametro booleano?

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; 
    } 
} 

Funziona bene, l'interfaccia è IService1:

[ServiceContract] 
public interface IService1 
{ 

    [OperationContract] 
    string GetData(int value); 

    [OperationContract] 
    CompositeType GetDataUsingDataContract(CompositeType composite); 

    // TODO: Add your service operations here 
} 

Questo è tutto per default; Visual Studio 2008 ha creato tutto questo.

Ho quindi creato una semplice applicazione Winform per "testarlo". Ho aggiunto il servizio di riferimento al mio servizio sopra menzionato e tutto funziona. Posso instanciate e chiamare myservice1.GetData (100); e ottengo il risultato.

Ma mi è stato detto che questo servizio dovrà essere utilizzato da un'app 2.0 Winforms tramite Web Services, quindi ho aggiunto il riferimento a una nuova applicazione Winforms .NET 2.0 creata da zero (solo un winform chiamato form1). Questa volta, aggiungendo il "riferimento web", è stato aggiunto il tipico "localhost" appartenente ai webservices; la procedura guidata ha visto il servizio WCF (in esecuzione in background) e l'ha aggiunto.

Quando ho provato a utilizzarlo, ho scoperto che il metodo GetData (int) era ora GetData (int, bool).

Ecco il codice

private void button1_Click(object sender, EventArgs e) 
    { 
     localhost.Service1 s1 = new WindowsFormsApplication2.localhost.Service1(); 
     Console.WriteLine(s1.GetData(100, false)); 
    } 

Avviso il falso nella chiamata GetData?

Non so quale parametro sia o da dove provenga, si chiama "valore booleano".

Qualcuno sa da dove viene? Qualcos'altro che dovrei fare per utilizzare un servizio WCF come servizio Web da .NET 2.0? (WinForms).

risposta

11

Bene bene ... apparentemente here's la risposta e possibili soluzioni o soluzioni alternative.

+0

Stessa avvertenza per la serializzazione XML :) – leppie

+0

Se potessi invertire la tua risposta e rispondere di nuovo, lo farei. Ho passato 2 ore a chiedermi perché stavo ottenendo versioni "notate" dei parametri che stavo impostando e passando a un servizio da .NET 2.0 a un servizio WCF .NET 4. Ho visto questi booleani arbitrari e non ho pensato a nulla di loro. Grazie v.much! – SpaceBison

+0

@SpaceBison - upvoted per te :) – Frozenskys