2011-01-07 9 views
7

Ho creato un semplice servizio WCF all'interno del progetto WebApplication.WCF: le operazioni con parametri out non sono supportate

[ServiceContract(Namespace = "http://my.domain.com/service")] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class MyService 
{ 
    [OperationContract] 
    public string PublishProfile(out string enrollmentId, string registrationCode) 
    { 
     enrollmentId = null; 
     return "Not supported"; 
    } 

costruito - tutto è stato compilato con successo

Dopo che ho provato ad aprire il servizio browser, ho ottenuto il seguente errore:

Operation 'PublishProfile' in contract 'MyService' specifies an 'out' or 'ref' parameter. Operations with 'out' or 'ref' parameters are not supported

non posso usare ' fuori 'parametri?

Cosa c'è di sbagliato qui?

Grazie

P.S. Io uso VS2008 SP1, .NET 3.5

risposta

4

Il problema nel mio caso era che la configurazione del servizio predefinito creata nella mia applicazione ASP.NET con la procedura guidata di Visual Studio era un tipo di servizio. L'associazione degli endpoint era "webHttpBinding". Per quanto ne so ora è vincolante per i servizi REST, e semplicemente non hanno la capacità fisica di lavorare con i parametri. Per loro fuori parametro non è supportato. E quello che ho realmente bisogno era un 'basicHttpBinding" che permette di lavorare con i parametri fuori.

Molte grazie a tutti quelli che mi ha aiutato a capire che.

+0

Sì, non ho detto che sto usando il servizio REST. Ma in realtà, non lo sapevo da solo. – Budda

0

Penso che il parametro Out dovrebbe venire dopo.

che dovrebbe essere simile a questo:

public string PublishProfile(string registrationCode, out string enrollmentId) 

Inoltre, si sta impostando la stringa da null - perché non usare string.Empty?

+0

che è solo uno stub ... Ma probabilmente ho bisogno di sapere meglio perché string.Empty è meglio – Budda

+0

cambiare posizione per parametro 'outed' non aiuta. – Budda

+0

http://codeasp.net/forums/asp-net-topics/getting-started-general-asp-net/117/ what-is-difference-between-null-vs-string-empty-vsin-c ha una buona risposta riguardo a 'string.empty'. Per quanto riguarda la tua domanda originale, sono in realtà perplesso sul motivo per cui ricevi un errore ... – VoodooChild

2

La risposta che ho trovato è stato:.

"L'idea di un parametro out è che il metodo sarà istanziare il riferimento null che si passa in un servizio web è senza stato, quindi l'handle che si ha su un oggetto che entra in un webservice come parametro non sarà lo stesso di quello che lo fa nel lato server Web. La natura di questo impedisce i parametri. "

Source

+0

Sulla mia esperienza ho usato i parametri 'out' (in un altro progetto). L'idea da un altro link (vedi la risposta di schellack) suggerisce: i parametri out non hanno senso in WCF, consiglio di usare i parametri. – Budda

1

Prova questo:

... 
[OperationContract] 
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)] 
public string PublishProfile(out string enrollmentId, string registrationCode) 
... 

credo che lo stile di corpo di default (nudo) supporta solo un singolo valore di ritorno.

Problemi correlati