2012-11-24 2 views
3

singleWSDL 매개 변수가 적용된 WCF 서비스에서 WSDL을 내 보냈습니다.WCF WSDL qXX 네임 스페이스 없애기

다음과 같은 유형 및 메서드 조각과 같이 많은 qXX XML 네임 스페이스가 사용됩니다.

<xs:complexType name="PrincipalReference"> 
    <xs:complexContent mixed="false"> 
    <xs:extension base="q2:EntityReferenceBase"> 
     <xs:sequence/> 
    </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 


<xs:element name="GetPermissions"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="principal" nillable="true" type="q1:PrincipalReference"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

PrincipalReference 클래스는 EntityReferenceBase에서 상속됩니다. PrincipalReference와 EntityReferenceBase는 동일한 C# 네임 스페이스에 있고 DataContractAttribute의 네임 스페이스 필드와 동일한 값을 갖습니다. 그래서 그들은 꼭 한 네임 스페이스에 있습니다.

어떻게하면 q1 및 q2 XML 네임 스페이스를 제거 할 수 있습니까? 웹 서비스는 다양한 환경 (플랫폼/언어)에서 사용되도록 고안되었으므로 명확한 WSDL이 더 행복합니다.

상속 사용을 중단하고 기본 클래스 내용을 파생 클래스에 복사하여 q2 문제를 해결할 수 있지만 메서드 매개 변수 유형에 적용되는 q1 네임 스페이스를 어떻게 처리해야할지 모릅니다.

답변

2

난 당신이 다음을 수행 할 필요가 있다고 생각 : - 서비스 계약 및 데이터 계약을 주석 때

네임 스페이스 속성을 사용합니다. 예를 들어 이런 식으로 뭔가 : - 당신은 당신의 엔드 포인트를 설정할 때

또한
[ServiceContract(Namespace = "http://some.url/2012/11")] 

[DataContract(Namespace = "http://some.url/2012/11")] 

, 당신이 bindingNameSpace 속성 설정 확인 : -

<endpoint address="" 
      binding="wsHttpBinding" 
      bindingConfiguration="someBindingConfiguration" 
      bindingNamespace="http://some.url/2012/11" 
      contract="Some.Contract" /> 
+0

나는 이미 이것을했다. 네임 스페이스 필드는 모든 속성에 설정됩니다. 모든 네임 스페이스 값은 동일합니다. – adontz

+1

죄송합니다 @ adontz 귀하의 게시물을 제대로 읽지 않아서 잘못된 질문에 답변했습니다. x2 : EntityReferenceBase를 x2 : Extension에서 q2를 없애는 확실한 방법은 없습니다. 앞서 말했듯이 기본 클래스에서 상속받지 않도록 PrincipalReference를 리팩터링 할 수 있습니다. 당신이 시도해 볼 수있는 다른 것 (이것이 작동하는지 모르겠다)은 EntityReferenceBase를 추상 클래스로 만드는 것이다. 이것은 * 생성 된 xsd에 영향을 미칠지 모른다. –

1

저도 같은 문제를 겪고을, 이상한 것은 그 것이었다 처음에는 이러한 q1, q2, q3 접두사가 없었습니다. DataContract serializer를 사용하고 있는데 DataContract 및 DataMember 특성 세트에 필요한 모든 것을 처리하지 못했습니다. 그 후에이 접두사는 없어졌습니다.

또한 serialize하는 것에 대해주의를 기울여야합니다.이 경우 더 이상 발생하지 않도록 int로 바꿔야하는 TimeSpan 값이 있습니다.

관련 문제