2011-12-19 20 views
14

Estoy intentando utilizar WCF Test Client para probar un servicio WCF que he creado.El método de servicio WCF no está disponible en WCF Test Client porque usa el tipo

El servicio tiene un método "SubmitRequest".

[OperationContract] 
Response SubmitRequest(Request request); 

Cuando cargo el cliente de prueba WCF, el método está en gris con el mensaje "Esta operación no es compatible en el cliente de prueba WCF, ya que utiliza el tipo WcfLibrary.Objects.Request

A continuación se la definición del tipo, ¿alguien ve nada malo?

[DataContract] 
public class Request 
{ 
    [DataMember] 
    public string LoanNumber { get; set; } 

    [DataMember] 
    public string ClientCode { get; set; } 

    [DataMember] 
    public Region Region { get; set; } 

    [DataMember] 
    public RequestType RequestType { get; set; } 

    [DataMember] 
    public List<RequestParameter> RequestParameters { get; set; } 

    [DataMember] 
    public List<MspWebCallType> MspWebCallsForXmlRequest { get; set; } 

    [DataMember] 
    public Hashtable XmlRequestParameters { get; set; } 

    public Request(string loanNumber, string clientCode, Region region, RequestType requestType, List<RequestParameter> requestParameters) 
    { 
     LoanNumber = loanNumber; 
     ClientCode = clientCode; 
     Region = region; 
     RequestType = requestType; 
     RequestParameters = requestParameters; 
    } 
} 

[DataContract] 
public class MspWebCallType 
{ 
    [DataMember] 
    public string WebService { get; set; } 
    [DataMember] 
    public string Operation { get; set; } 
    [DataMember] 
    public string Version { get; set; } 
    [DataMember] 
    public Hashtable Parameters { get; set; } 
    [DataMember] 
    public Msp.FavReadViews FAVReadViewIndicator { get; set; } 
    [DataMember] 
    public Msp.DsReadIndicators DSReadInidicator { get; set; }   
} 

[DataContract] 
public enum Region 
{ 
     [EnumMember] 
     P2, 
     [EnumMember] 
     PROD 
} 

[DataContract] 
public enum RequestType 
{ 
    [EnumMember] 
    None, 
    [EnumMember] 
    XmlRequest, 
    [EnumMember] 
    SomeOtherRequestType 
} 

[DataContract] 
public struct RequestParameter 
{ 
    [DataMember] 
    public string ParameterName { get; set; } 

    [DataMember] 
    public string ParameterValue { get; set; } 
} 

Gracias.

EDITAR w/respuesta ...
la la operación no estaba disponible a través de WCF Test Client porque el tipo MspWebCallType tenía una propiedad de tipo Hashtable. Una vez que eliminé esta propiedad, se solucionó el problema. Gracias por la ayuda de todos.

+0

¿El WSDL hace referencia a un XSD para la clase 'Solicitud'? –

+0

Ha intentado: [OperationContract] [KnownType (typeof (Request))] Response SubmitRequest (Solicitud de solicitud); – kd7

+0

Una pregunta: ¿su clase de solicitud está realmente dentro del espacio de nombres WcfLibrary.Objects? –

Respuesta

26

The following is a list of features not supported by WCF Test Client:

  • Types: Stream, Message, XmlElement, XmlAttribute, XmlNode, types that implement the IXmlSerializable interface, including the related XmlSchemaProviderAttribute attribute, and the XDocument and XElement types and the ADO.NET DataTable type.

  • Duplex contract.

  • Transaction.

  • Security: CardSpace , Certificate, and Username/Password.

  • Bindings: WSFederationbinding, any Context bindings and Https binding, WebHttpbinding (Json response message support).

Fuente: MSDN

Comprobar Msp.FavReadViews y Msp.DsReadIndicators para verificar que cumplen.

+0

Msp.FavReadViews y Msp.DsReadIndicators se definen dentro de un proyecto de biblioteca de clases referenciado. Son enumeraciones simples pero no tienen los atributos EnumMember. Eliminé estas 2 propiedades del tipo Solicitud y aún experimento el mismo problema. Gracias. – thiag0

+0

@ igby-largeman gracias por la lista en profundidad, también parece que el tipo de "Tipo" no es compatible. Si tienes la oportunidad, agrégalo a tu lista. – Gent

+0

Por qué en este enlace explica cómo [Habilitar la transmisión en tiempo real] (http://msdn.microsoft.com/en-us/library/ms789010.aspx) –

0

Puede ser porque Request necesita tener un constructor público no paramétrico.

+0

Intenté agregar un constructor sin parámetros pero eso no resolvió el problema. – thiag0

+0

Bueno, ¿el WCF Test Client no respalda la definición de su servicio como un gran negocio para usted? Funciona solo para interfaces de servicio relativamente simples. Normalmente uso SoapUI para probar mis servicios. –

+0

Además, WCF Storm es genial. –

0

Respondiendo aquí ya que este es el primer resultado en Google actualmente para este error:

Además de respuesta @Igby Largeman 's, también recibirá este error si alguna parte de sus contratos de operación o de datos, usted tiene usó un tipo que no es serializable.

Tomemos un ejemplo de la clase de excepciones en .NET ...

que tenía un caso por el que un desarrollador en mi equipo había optado por devolver el objeto de excepciones al cliente del servicio a través de un DTO, en lugar de poner el mensaje de excepción en el DTO manualmente. Visual Studio no le advertirá en tiempo de compilación (debería, realmente), que la clase no es serializable, solo fallará en el tiempo de ejecución.

Si recibe este error y ha descartado la respuesta anterior, asegúrese de verificar los tipos utilizados en sus contratos y DTO; algo que no puede ser serializable podría ser su culpable.

Espero que esto le ahorre a alguien algo de tiempo.

0

Tuve el mismo error y el problema fue que la clase tenía una propiedad System.Drawing.Image. Lo elimino de la clase y funcionó. Convierto la matriz de bytes a una cadena base64.

Cuestiones relacionadas