C# WCF AddServiceReference导致自定义工具错误,不生成代理
“添加服务引用”以及SvcUtil的所有特性都存在问题。 为了复制,只需添加带有参数的OperationContract或返回以下类:C# WCF AddServiceReference导致自定义工具错误,不生成代理,c#,.net,wcf,visual-studio-2010,serialization,C#,.net,Wcf,Visual Studio 2010,Serialization,“添加服务引用”以及SvcUtil的所有特性都存在问题。 为了复制,只需添加带有参数的OperationContract或返回以下类: [XmlSchemaProvider("MySchema")] public class MyStructure : IXmlSerializable { private XmlElement e; private static void Func(object o, ValidationEventArgs args) { }
[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
}
[XmlSchemaProvider(“MySchema”)]
公共类MyStructure:IXmlSerializable
{
私有元素e;
私有静态void Func(对象o,ValidationEventArgs args)
{
}
公共静态XmlQualifiedName MySchema(XmlSchemaSet xs)
{
//xs.XmlResolver=新的XmlUrlResolver();
XmlSchema s=XmlSchema.Read(新的XmlTextReader(新的StringReader)(“”),null);
xs.Add(s);
返回新的XmlQualifiedName(“MyStructure”);
}
#区域IXmlSerializable成员
public System.Xml.Schema.XmlSchema GetSchema()
{
抛出新的NotImplementedException();
}
公共void ReadXml(XmlReader)
{
XmlDocument doc=新的XmlDocument();
e=(XmlElement)doc.ReadNode(reader);
}
public void WriteXml(XmlWriter)
{
e、 书面(作者);
}
#端区
}
结果是,当您使用AddWebReference或AddSerivceReference而不引用包含MyStructure类型的类库时,一切都会很好,您将在自动创建的代理上获得xmlElement表示
但是,当您有参考时,您将收到以下警告:
================
警告1自定义工具警告:无法导入wsdl:portType
详细信息:运行WSDL导入扩展时引发异常:System.ServiceModel.Description.DataContractSerializerMessageCompactImporter
错误:命名空间“”中数据协定名称为“MyStructure”的引用类型“ServiceLibrary.MyStructure,ServiceLibrary,Version=1.0.0,Culture=neutral,PublicKeyToken=null”无法使用,因为它与导入的DataContract不匹配。需要从引用的类型中排除此类型。
XPath到错误源://wsdl:definitions[@targetNamespace='']/wsdl:portType[@name='IService1']\Projects\WCFSample\WCFExample\testAddressReference\Service reference1\Reference.svcmap 1 testAddressReference
======================
不会为您生成任何代理
现在,当您有一个通用的DataContract和/或使用IsReference属性时,internet上已经充满了这方面的描述
这是一个非常严重的问题,因为任何非类型化的数据都会造成这个问题。
找不到任何解决问题的方法。如果我想通过共享合同类库来了解客户端的类型,该怎么办?这种类型的异常通常意味着服务生成的合同类型与引用的类型(如消息所示!)至少存在一个差异。但我发现,乍一看可能并不明显。确保服务器上的所有嵌套和引用类型都是最新的。在我的例子中,服务器上更新了嵌套类型。我以为我已经通过本地引用的程序集(和共享引用类型)进行了更新,但我错过了一些。经过仔细检查才找到罪犯 请参阅中的其他信息。我有一个建议:
我也有类似的错误,包括: 找不到.svcmap文件。它可能已被移动或删除。要生成新的.svcmap文件,请删除服务引用并再次添加它 此时,除非关闭VS2010并再次打开它,否则无法删除服务引用 情况是:我的WCF服务正在运行,我以编程方式在我定义的HTTP地址添加了一个
说明.ServiceMetadataBehavior
在VS2010
中,我尝试在HTTP地址添加一个服务引用,我看到了我的服务,我添加了引用,瞧,错误和警告
问题:我的HTTP地址包含一些WCF不喜欢的关键字。特别是单词COM
(它也与LPT
断开)
因此我的解决方案:修改我的HTTP地址,使其不包含COM这个词。这对我很有用。如果服务是通过HTTPS托管的,请进入服务器的IIS管理器。在站点的“SSL设置”下,确保选中了“需要SSL”,并选中客户端证书单选按钮中的“接受”。我希望知道这个问题的答案。我现在正在与VS2010打一个几乎相同的问题。根据我的经验,多年来,WCF在svcutil.exe中生成适当的WSDL以供使用时一直不稳定且不可靠,令人失望的是,它在VS2010中还没有得到修复。微软没有人真正使用这项技术吗?因为我无法设置WCF服务而不遇到此问题或其他密切相关的问题。MICROSOFT请修复此问题!!!(或者我去Java)