Quiero tener una función en mi servicio WCF con su tipo de devolución como interfaz, pero cuando la llamo desde un cliente recibo un System.Object
, no la clase que implementa la interfaz que el servicio enviadoCómo exponer una interfaz en el servicio web
Aquí hay un código de ejemplo:
[ServiceContract]
public interface IService
{
[OperationContract]
string SayHello();
[OperationContract]
IMyObject GetMyObject();
}
public interface IMyObject
{
int Add(int i, int j);
}
[DataContract]
public class MyObject : IMyObject
{
public int Add(int i, int j)
{
return i + j;
}
}
En la implementación de este servicio que tengo:
public class LinqService : IService
{
public string SayHello()
{
return "Hello";
}
public IMyObject GetMyObject()
{
return new MyObject();
}
}
SayHello()
funciona bien, pero GetMyObject()
devuelve un System.Object
. ¿Cómo puede cambiar este código para que GetMyObject()
devuelva un objeto que implemente IMyObject
?
Editar 1
cambiado el código de la siguiente manera:
using System.Runtime.Serialization;
using System.ServiceModel;
[ServiceContract]
public interface IService
{
[OperationContract]
string SayHello();
[OperationContract]
IMyObject GetMyObject();
}
[ServiceKnownType(typeof(MyObject))]
public interface IMyObject
{
[OperationContract]
int Add(int i, int j);
}
[DataContract]
public class MyObject:IMyObject
{
public int Add(int i, int j)
{
return i + j;
}
}
Pero sin éxito!
¿Puedo solicitar el propósito de devolver una interfaz desde su método WCF? – CSharpenter
Lo mismo que puede devolver una interfaz desde un método: Ocultar la implementación desde el usuario de wcf. ¿Por qué mi usuario wcf debería saber sobre cualquier clase que implementé para una interfaz? El usuario solo necesita saber qué propiedades o métodos ofrece un objeto. En mi ejemplo, puedo devolver una implementación diferente de IMyObject en función de algunos parámetros. – mans
En general, esa es una buena intención, pero no tiene sentido. La persona que llama no verá ninguna "implementación" de todos modos.Además, no es compatible con 'OperationContract' dentro de' DataContract'. Los dos son conceptos realmente separados. Debe consultar [Diseño de contratos de servicio] (http://msdn.microsoft.com/en-us/library/ms733070.aspx) en MSDN para obtener más información. –