2011-01-07 14 views
7

He creado un servicio WCF simple dentro del proyecto WebApplication.WCF: las operaciones sin parámetros no son compatibles

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

construido - todo lo que se compila con éxito

Después de eso he tratado de abrir el servicio en el navegador, tengo el siguiente error:

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

no puedo usar ' fuera de los parámetros?

Qué está mal aquí?

Gracias

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

Respuesta

4

El problema en mi caso era que la configuración de servicio predeterminada creada en mi aplicación ASP.NET con el asistente de Visual Studio era un tipo de servicio. El enlace del punto final era "webHttpBinding". Por lo que entiendo ahora, es vinculante para los servicios REST, y simplemente no tienen capacidad física para trabajar sin parámetros. Para ellos, el parámetro no es compatible. Y lo que realmente necesitaba era un 'basicHttpBinding" que permite trabajar con los parámetros out.

Muchas gracias a todos los que me ayudaron a darse cuenta de que.

+0

Yee ,,, no mencioné que estoy usando el servicio REST. Pero en realidad, yo mismo no lo sabía. – Budda

0

Creo que el parámetro Out debe venir después.

debería ser así:

public string PublishProfile(string registrationCode, out string enrollmentId) 

Además, se está ajustando la cadena a null - ¿por qué no usar string.Empty?

+0

eso es sólo un esbozo ... Pero probablemente lo necesitan saber más por qué string.Empty es mejor – Budda

+0

cambiar la posición del parámetro 'outed' no ayuda. – 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 tiene una buena respuesta con respecto a 'string.empty'. En cuanto a su pregunta original, en realidad estoy perplejo por qué está obteniendo un error ... – VoodooChild

2

La respuesta que he encontrado fue:.

"La idea de un parámetro de salida es que el método va a crear una instancia de la referencia nula de que se pasa en un servicio web no tiene estado, por lo tanto el identificador que tiene en un objeto que va a un servicio web como parámetro no será el mismo que el que lo hace en el lado del servidor del servicio web. La naturaleza de esto evita los parámetros ".

Source

+0

En mi experiencia, he usado parámetros 'fuera' (en otro proyecto). Idea de otro enlace (ver la respuesta de schellack) sugiere: los parámetros tienen sentido en WCF, recomiendo usar parámetros. – Budda

1

Prueba esto:

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

creo que el estilo de la carrocería por defecto (desnudo) sólo admite un único valor de retorno.

Cuestiones relacionadas