2014-05-14 2 views
0

WCF 초보자는 여기에 있습니다.Svcutil.exe가 잘못된 메서드 형식을 생성합니다.

  1. 일반적인 논리
  2. 클라이언트
  3. 서버

모두 ClientServer 수입 Common Logic : 내 솔루션에서 내가 3 개 프로젝트가있다.

내 서버에는 GetNextFile이라는 메서드가 있습니다. 다음은 인터페이스 구현 : 여기

[OperationContract] 
RemoteFileInfo GetNextFile(GUIDSetting GUID); 

무엇 RemoteFileInfoGUIDSetting은 다음과 같습니다 여기

[MessageContract] 
public class GUIDSetting 
{ 
    [MessageBodyMember] 
    public string Guid; 
} 

[MessageContract] 
public class RemoteFileInfo : IDisposable 
{ 
    [MessageHeader(MustUnderstand = true)] 
    public string FileName; 

    [MessageHeader(MustUnderstand = true)] 
    public long Length; 

    [MessageHeader(MustUnderstand = true)] 
    public string Status; 

    [MessageBodyMember(Order = 1)] 
    public Stream FileByteStream; 

    public void Dispose() 
    { 
     if (FileByteStream != null) 
     { 
      FileByteStream.Close(); 
      FileByteStream = null; 
     } 
    } 
} 

그리고 실제 구현의 조각 : 생성

public RemoteFileInfo GetNextFile(GUIDSetting GUIDRequested) 
{ 
    //stuff 
    return result; 
} 

내가 사용는 svcutil을 내 프록시 나는이 매개 변수를 사용합니다 :

,210

하지만 생성 된 프록시에서 그 GetNextFile 방법은 다음과 같습니다

public string GetNextFile(string Guid, out long Length, out string Status, out System.IO.Stream FileByteStream) 
{ 
    //stuff 
} 

이있다 생성 된 비동기 방법 :

[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] 
System.Threading.Tasks.Task<RemoteFileInfo> IServiceFileStream.GetNextFileAsync(GUIDSetting request) 
{ 
    return base.Channel.GetNextFileAsync(request); 
} 

왜 이런 일이? 내가 Lenght, StatusStreamout 매개 변수로 사용하는 이유를 알아낼 수는 있지만 어디에서 fileName입니까? 그리고 비동기 메서드에 올바른 매개 변수 (RemoteFileInfoGUID 설정)가있는 이유는 무엇입니까? 내 동기화 기능에 이러한 매개 변수가 필요하지만 그것을 어떻게 얻을 수 있는지, 왜 svcutils.exe가이 출력을 내는지 설명하지 못합니다.

+0

,이 댓글이 실제로 솔루션입니다 그 상황 중 하나입니다, 그것은했다! 답으로 게시하면 해결책으로 표시 할 수 있습니다! 고맙습니다.이 사실을 더 잘 이해하기 위해 WCF를 공부해야합니다. – HypeZ

답변

0

SOAP 구조가 어떻게 구성되는지 구체적으로 제어 할 필요가없는 경우 사용을 시도하십시오 MessageContract 대신 DataContract. 예를 들어

:

[DataContract] 
public class GUIDSetting 
{ 
    [DataMember] 
    public string Guid; 
}