2011-01-07 5 views
7

Ich habe einen einfachen WCF-Dienst innerhalb des WebApplication-Projekts erstellt.WCF: Vorgänge mit out-Parametern werden nicht unterstützt

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

gebaut - alles erfolgreich kompiliert wird

Danach habe ich versucht Dienst in Browser zu öffnen, habe ich die folgende Fehlermeldung anzeigt:

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

Kann ich nicht verwenden " out 'Parameter?

Was ist hier falsch?

Danke

P.S. Ich verwende VS2008 SP1, .NET 3.5

Antwort

4

Das Problem in meinem Fall war, dass die Standarddienstkonfiguration, die in meiner ASP.NET-Anwendung mit dem Visual Studio-Assistenten erstellt wurde, ein Diensttyp war. Die Endpunktbindung war "webHttpBinding". Soweit ich es jetzt verstehe, ist es für REST-Dienste bindend, und sie haben einfach keine physische Fähigkeit, ohne Parameter zu arbeiten. Für sie wird der Parameter out nicht unterstützt. Und was ich wirklich brauchte, war ein ‚Basichttpbinding“, die mit Out-Parametern arbeiten können.

Vielen Dank an alle, die mir geholfen, dass herauszufinden.

+0

Yee ,,, ich habe nicht erwähnt, dass ich REST-Service verwende. Aber eigentlich wusste ich das selbst nicht. – Budda

0

Ich denke, die Out Parameter sollte nach kommen.

sollte es so sein:

public string PublishProfile(string registrationCode, out string enrollmentId) 

Auch Sie die Zeichenfolge null setzen - warum nicht string.Empty benutzen?

+0

Das ist ein Stummel nur ist ... Aber wahrscheinlich muss ich mehr wissen, warum string.Empty ist besser – Budda

+0

Ändern der Position für 'Outed' Parameter hilft nicht – Budda

+0

http://codeasp.net/forums/asp-net-topics/getting-started-general-asp-net/117/ what-is-difference-zwischen-null-vs-string-empty-vsin-c hat eine gute Antwort in Bezug auf "string.empty". In Bezug auf Ihre ursprüngliche Frage bin ich eigentlich ratlos, warum Sie einen Fehler bekommen ... – VoodooChild

2

Die Antwort, die ich gefunden habe, war:.

„Die Idee eines out-Parameter ist, dass das Verfahren die Nullreferenz instanziiert, die Sie in geben Ein Web-Service staatenlos ist, deshalb Das Handle, das Sie auf einem Objekt haben, das als Parameter in einen Webservice eingeht, ist nicht dasselbe wie das, das es in die Webservice-Server-Seite schafft.

Source

+0

Nach meiner Erfahrung habe ich 'out' Parameter (in einem anderen Projekt) verwendet. Idee von einem anderen Link (siehe Schellacks Antwort) schlägt vor: Out-Parameter machen Sinn in WCF, ich empfehle Out-Parameter zu verwenden. – Budda

1

Try this:

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

ich die Standard-Body-Style (bare) glauben nur einen einzigen Rückgabewert unterstützt.

Verwandte Themen