Я пишу приложение .NET 3.5 и контролирую как службу WCF, так и клиента.
Я использую svcutil для генерации прокси-классов для своих сервисов, объединяя несколько сервисов, поскольку они совместно используют типы данных.
svcutil /out:ServiceReference.cs /noconfig /namespace:*,Global.ServiceReference
/tcv:Version35 http://localhost:12345/first.svc http://localhost:12345/second.svc
Более серьезная проблема - ошибка: у меня дважды создается класс, в результате чего возникает много ошибок «Неоднозначность между Global.ServiceReference.MyClass.MyField» и «Global.ServiceReference.MyClass.MyField '». Обратите внимание, что сейчас на этот класс ссылаются только в ОДНОЙ из служб, хотя в будущем на него будут ссылаться еще.
Два сгенерированных класса выглядят так:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="MyClass", Namespace="http://schemas.datacontract.org/2004/07/MyService.Util")]
public partial class MyClass : object, System.Runtime.Serialization.IExtensibleDataObject
{
//fields
}
и
[System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "3.0.4506.2152")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.datacontract.org/2004/07/MyService.Util")]
public partial class MyClass
{
// same fields
}
На основе примененных к ним атрибутов это как-то связано с DataContractSerializer и XmlSerializer, но я не совсем понимаю, что они означают.
Вторая проблема заключается в том, что svcutil выдает множество предупреждений в виде:
Error: There was a validation error on a schema generated during export:
Source:
Line: 1 Column: 10415
Validation Error: The simpleType 'http://schemas.microsoft.com/2003/10/Serialization/:guid' has already been declared.
Эти ошибки случаются даже с двумя очень простыми сервисами. Например, если служба # 1 имеет
[OperationContract]
public string test(int test)
{
return "test";
}
и услуга № 2 имеет
[OperationContract]
public int Ping(string test)
{
return 23;
}
... Я получаю предупреждения. Их около 100, все жалуются на различные globalElements, globalAttributes или простые типы, такие как guid, duration, char и т. Д.
Если я поменяю одну из служб на пустые параметры / тип возврата, я не получу предупреждения. Это действительно сбивает с толку, так как это самый простой тест. Svcutil не использует никаких пользовательских типов вообще. Есть идеи, что здесь происходит?