“添加服务引用”的问题,实际上与SvcUtil的所有功能有关。 为了再现你只需要与参数或返回下面的类添加OperationContract的:WCF AddServiceReference导致自定义工具错误,不生成代理
[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
}
的结果是,当您使用AddWebReference或AddSerivceReference不含有MYSTRUCTURE类型的类库,一切参考将罚款广告,你会得到一个xmlElement表示在自动创建的代理。
然而,当你有一个参考,你会得到以下警告:
================
警告1个自定义工具警告:不能导入wsdl:portType 详细信息:运行WSDL导入扩展时引发异常:System.ServiceModel.Description.DataContractSerializerMessageContractImporter 错误:引用类型'ServiceLibrary.MyStructure,ServiceLibrary,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'数据合同名称'名称空间中的'MyStructure''不能使用,因为它与导入的DataContract不匹配。需要从引用类型中排除此类型。 XPath to Error来源:// wsdl:definitions [@ targetNamespace ='http://tempuri.org/']/wsdl:portType [@ name ='IService1'] \ Projects \ WCFSample \ WCFExample \ TestAddReference \ Service References \ ServiceReference1 \ Reference.svcmap 1 1 TestAddReference
======================
而且没有代理会为你生成。
现在,当您有一个通用的DataContract和/或使用IsReference属性时,互联网充满了对此的描述。
这是一个非常严重的问题,因为任何非类型的数据都会造成这个问题。 找不到解决问题的方法。如果我想通过分享合同的类库来了解客户端的类型,该怎么办?
我希望我知道这个答案。我现在正在与VS2010打一场几乎相同的问题。根据我的经验,在svcutil.exe中生成适当的WSDL以供消费时,WCF多年来一直不稳定且不可靠,并且它在VS2010中尚未得到修复,这让人感到很失望。微软没有人真的使用这种技术?因为我不能设置WCF服务而不会遇到这个问题或其他一些密切相关的问题。 – 2010-01-05 04:02:26
MICROSOFT请修复此问题! (或者我去Java) – capdragon 2011-03-02 21:40:32