Un problema con "Agregar referencia de servicio", y en realidad con SvcUtil en todas sus características. el fin de reproducir sólo tiene que añadir una OperationContract con el argumento o regresar a la clase siguiente:WCF AddServiceReference causando error de herramienta personalizada, no produciendo proxy
[XmlSchemaProvider("MySchema")]
public class MyStructure : IXmlSerializable
{
private XmlElement e;
private static void Func(object o, ValidationEventArgs args)
{
}
public static XmlQualifiedName MySchema(XmlSchemaSet xs)
{
//xs.XmlResolver = new XmlUrlResolver();
XmlSchema s = XmlSchema.Read(new XmlTextReader(new StringReader("<?xml version=\"1.0\"?><xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"><xs:complexType name=\"MyStructure\"><xs:sequence><xs:any /></xs:sequence></xs:complexType></xs:schema>")), null);
xs.Add(s);
return new XmlQualifiedName("MyStructure");
}
#region IXmlSerializable Members
public System.Xml.Schema.XmlSchema GetSchema()
{
throw new NotImplementedException();
}
public void ReadXml(XmlReader reader)
{
XmlDocument doc = new XmlDocument();
e = (XmlElement)doc.ReadNode(reader);
}
public void WriteXml(XmlWriter writer)
{
e.WriteTo(writer);
}
#endregion
}
El resultado es que cuando se utiliza addwebreference o AddSerivceReference sin una referencia a la biblioteca de clases que contiene el tipo MyStructure, todo estará bien y obtendrá una representación de xmlElement en el proxy creado automáticamente.
Sin embargo, cuando se tiene una referencia obtendrá la siguiente advertencia:
================
Advertencia advertencia de la herramienta 1 personalizado: no puede importar wsdl: portType Detalle: se produjo una excepción al ejecutar una extensión de importación WSDL: System.ServiceModel.Description.DataContractSerializerMessageContractImporter Error: Tipo de referencia 'ServiceLibrary.MyStructure, ServiceLibrary, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' con el nombre del contrato de datos 'MyStructure' en el espacio de nombres '' no se puede usar porque no coincide con el DataContract importado. Es necesario excluir este tipo de los tipos a los que se hace referencia. XPath a error Fuente: // WSDL: definiciones [@ targetNamespace =' http://tempuri.org/ ']/WSDL: portType [@ name =' IService1' ] \ Projects \ WCFSample \ WCFExample \ TestAddReference \ Referencias Servicio ServiceReference1 \ \ Reference.svcmap 1 1 TestAddReference
======================
Y sin proxy se generará para usted.
Ahora, Internet está lleno de descripciones de esto cuando se tiene un DataContract genérico y/o se usa el atributo IsReference.
Este es un problema muy serio, ya que cualquier dato no tipeado causará este problema. No se pudo encontrar ninguna forma de resolver el problema. ¿Qué sucede si quiero saber el tipo del lado del cliente, compartiendo la biblioteca de clases de los contratos?
Ojalá supiera la respuesta a esto. Estoy peleando un problema casi idéntico con VS2010 en este momento. En mi experiencia, WCF ha sido inestable y no confiable durante muchos años cuando se trata de generar WSDL apropiados para el consumo en svcutil.exe, y es decepcionante que aún no se haya solucionado en VS2010. ¿Nadie en Microsoft realmente usa esta tecnología? Porque no puedo configurar un servicio WCF sin toparme con este u otro problema estrechamente relacionado. –
¡MICROSOFT POR FAVOR ARREGLAR ESTO! (o voy a Java) – capdragon