2010-03-31 2 views
3

WCF에서 구현해야하는 서비스를 정의하는 WSDL 파일이 있습니다. WSDL 파일의 svcutil을 사용하여 프록시를 생성 할 수 있다는 것을 알았고 생성 된 인터페이스를 사용하여 서비스를 구현할 수있었습니다.svcutil, WSDL 및 생성 된 인터페이스가 구현에 충분하지 않습니다.

유감스럽게도 인터페이스에 올바른 속성이 포함되어 계약을 노출하게하는 방법을 찾지 못하는 것 같습니다.

모든 작업에는 "OperationContractAttribute"특성이 있지만 서비스를 노출하려면 해당 작업에 대해 "OperationContract"가 필요합니다. "ServiceContractAttribute"및 "ServiceContract"와 동일한 작업을 수행하고 DataContract를 상상해 보았지만 그렇게까지는 얻지 못했습니다.

수동으로 이러한 변경을 수행 할 수 있지만 기존 코드를 쉽게 사용할 수있는 기술을 선호하거나 더 나은 코드를 내 용도로 생성 할 수 있습니다. 이것이 할 수있는 방법이 있습니까?

감사합니다.

편집 :

Issue on Microsoft Connect

명령 사용 :

svcutil ObjectManagerService.wsdl /n:*,Sample /o:ObjectManagerServiceProxy.cs /nologo 

코드 샘플 :

public interface ObjectManagerSyncPortType 
{ 

    // CODEGEN: Generating message contract since the operation createObject is neither RPC nor document wrapped. 
    [System.ServiceModel.OperationContractAttribute(Action="http://www.sample.com/createObject", ReplyAction="*")] 
    [System.ServiceModel.XmlSerializerFormatAttribute()] 
    Sample.createObjectResponse1 createObject(Sample.createObjectRequest1 request); 
    // ... 
} 

가장 잘 나는이 일을 볼/알 수 있습니다 e WSDL 파일은 완전히 독립적이며 추가 XSD 파일이 필요하지 않습니다.

+0

사용했던 명령 줄을 보여주십시오. 또한 생성 된 코드 샘플을 표시하십시오. –

답변

6

따라서 ReplyAction="*"culprit입니다. 도움을 주셔서 감사합니다.

+1

@chtmd : http://connect.microsoft.com/visualstudio에서 Connect에보고 해 주시겠습니까?일단 끝나면이 답변을 편집하여 Connect 버그 보고서에 대한 링크를 포함시켜 수정 사항이 얼마나 중요하다고 생각하는지 투표 할 수 있습니다. –

+1

문제를 생성하고 위의 링크를 추가했습니다. – David

+1

10 점 이상 줄 수 있으면 좋겠다. – Dialecticus

1

정말, 생성 된 코드에 문제가 표시되지 않습니다

public interface ObjectManagerSyncPortType 
{ 

    // CODEGEN: Generating message contract since the operation createObject is neither RPC nor document wrapped. 
    [System.ServiceModel.OperationContractAttribute(Action="http://www.sample.com/createObject", ReplyAction="*")] 
    [System.ServiceModel.XmlSerializerFormatAttribute()] 
    Sample.createObjectResponse1 createObject(Sample.createObjectRequest1 request); 

이 절대적으로, 완전히 유효한 코드 - 그것을 시도! 나는 그것이 확실히 달릴 것이라고 확신한다.

모든 작업은 "OperationContractAttribute를" 속성을 가지고 있지만, 서비스에 대한 가 노출 될 수 있지만, 나는 각각은 "OperationContract를"을 요구 로 나타납니다. 및 [OperationContractAttribute]~100%에 해당합니다 -

[OperationContract]를 사용합니다 (WCF에 대한 특별한 것이 여기에 속성을하지 에 대한 어떤 .NET 속성이 정말 진실하고 유효하고 사용 가능한입니다) 짧은 손 표기법입니다. 거기에 어떤 문제도 보이지 않습니다.

+1

(Action = "http://www.sample.com/createObject", ReplyAction = "*") 부분이 엉망인 것 같지만 실제로 이유를 이해하지 못합니다. 인터페이스에서 해당 정보를 삭제하고 [OperationContractAttribute]가 있으면 서비스를 방문 할 때 작업이 WSDL에 정상적으로 표시됩니다. 그렇지 않으면 표시되지 않습니다. – David

관련 문제