「添加服務引用」的問題,實際上與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