2009-11-17 2 views
7

저는 .NET 3.5 응용 프로그램을 작성 중이며 WCF 서비스와 클라이언트를 모두 제어하고 있습니다.svcutil.exe를 사용하여 여러 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 
} 

, 이것은 XmlSerializer를 대 DataContractSerializer 함께 할 수있는 뭔가가,하지만 난 돈 그게 무슨 뜻인지 정말로 이해하지 못합니다.

두 번째 문제

이는 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 등의 simpleTypes에 대해 불평하고 있습니다.

서비스 중 하나를 void/반환 유형으로 만 변경하면 경고를 받으십시오. 이것이 가장 간단한 가능한 테스트이기 때문에 이것은 정말로 혼란 스럽습니다. 모든 사용자 정의 유형을 사용하지 않고 svcutil은 barfing입니다. 무슨 일이 벌어지고 있는거야?

답변

1

유형을 공유하고이 방법을 1 년 이상 사용해온 여러 서비스를 나열하면 경고 메시지가 나타납니다. 유틸리티가 클래스를 생성하는지 또는 아무것도 작성하지 않는지 여부

+0

을가 클래스를 만드는 것 네. 나는 그 경고가 나를 해치고 있다는 것을 알지 못해서, 정말로 문제가되지 않는다면 나는 그들을 무시해도 행복하다. 제 질문의 첫 번째 부분에 나오는 클래스 정의가 중복되어서 지금 당장 나를 죽이고 있습니다. – Clyde

+2

그냥 svcutil.exe를 사용하여 동일한 작업을 수행 할 때 오류가 발생합니다. 출력 파일이 생성된다는 의미에서 실제로 경고 메시지가 나타나지만 화면의 메시지에 " 오류:....!" Superconfusing! – azheglov

3

XSD 파일에 뭔가가있어서 svcutil이 XmlSerializer를 호출하여 일부 유형을 생성합니다. 불행히도 DataContract 및 XmlSerializer 사이의 형식 공유를 사용할 수 없으므로 중복 된 형식이 생깁니다. 당신은 아마 서버에 독점적으로 DC를 사용하는 것 같습니다 때문에,과 같이, 단지 XmlSerializer가로 넘어 DC 모드를 유지하기는 svcutil을 강제하지 충분히있을 수 있습니다

svcutil /serializer:DataContractSerializer ... 
+0

감사합니다! Alex! 이것은 실제로 나를 위해 일했습니다. –