2011-01-07 25 views
7

Utworzono prostą usługę WCF wewnątrz projektu WebApplication.WCF: operacje bez parametrów nie są obsługiwane

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

zbudowany - wszystko jest skompilowany z powodzeniem

Potem starałem się otworzyć w przeglądarce obsługę, mam następujący błąd:

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

Nie mogę użyć ' out "parametry?

Co jest nie tak?

Dzięki

P.S. Używam VS2008 SP1, .NET 3.5

Odpowiedz

4

Problem w moim przypadku polegał na tym, że domyślna konfiguracja usługi utworzona w mojej aplikacji ASP.NET z kreatorem Visual Studio była typem usługi. Powiązanie punktu końcowego to "webHttpBinding". O ile rozumiem, jest to wiążące dla usług REST i po prostu nie mają fizycznej zdolności do pracy bez parametrów. Dla nich parametr out nie jest obsługiwany. I co ja rzeczywiście potrzebne było „basicHttpBinding”, który pozwala na pracę z parametrami zewnątrz.

Dziękujemy wszystkim, którzy pomogli mi zrozumieć, że.

+0

Yee ,,, Nie wspomniałem, że używam usługi REST. Ale tak naprawdę sam tego nie wiedziałem. – Budda

0

Myślę, że parametr Out powinien przyjść po.

powinno być tak:

public string PublishProfile(string registrationCode, out string enrollmentId) 

Również ustawiasz ciąg do null - dlaczego nie używać string.Empty?

+0

To jest tylko zalążek ... Ale chyba muszę dowiedz się więcej dlaczego string.Empty jest lepszy – Budda

+0

zmiana pozycji dla parametru "outed" nie pomaga – Budda

+0

http://codeasp.net/forums/asp-net-topics/getting-started-general-asp-net/117/ co-jest-różnica-między-null-vs-string-empty-vsin-c ma dobrą odpowiedź dotyczącą 'string.empty'. Odnosząc się do twojego pierwotnego pytania, jestem właściwie zakwestionowany, dlaczego dostaję błąd ... – VoodooChild

2

Odpowiedź znalazłem było.

„Pomysł parametr wyjściowy jest to, że metoda będzie instancję pustą referencję, które przechodzą w serwis internetowy jest bezpaństwowcem, dlatego uchwyt, który masz na obiekcie, który trafia do usługi sieciowej jako parametr, nie będzie taki sam, jak ten, który wchodzi do strony serwera usług sieciowych, a to uniemożliwia parametry wyjściowe. "

Source

+0

Z mojego doświadczenia skorzystałem z parametrów "out" (w innym projekcie). Pomysł z innego linku (patrz odpowiedź schellacka) sugeruje: parametry out mają sens w WCF, polecam użyć parametrów out. – Budda

1

Spróbuj tego:

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

wierzę styl domyślny ciała (gołe) obsługuje tylko jedną wartość powrotną.

Powiązane problemy