WCF 초보자는 여기에 있습니다.Svcutil.exe가 잘못된 메서드 형식을 생성합니다.
- 일반적인 논리
- 클라이언트
- 서버
모두 Client
및 Server
수입 Common Logic
: 내 솔루션에서 내가 3 개 프로젝트가있다.
내 서버에는 GetNextFile
이라는 메서드가 있습니다. 다음은 인터페이스 구현 : 여기
[OperationContract]
RemoteFileInfo GetNextFile(GUIDSetting GUID);
무엇 RemoteFileInfo
및 GUIDSetting
은 다음과 같습니다 여기
[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
, Status
및 Stream
을 out
매개 변수로 사용하는 이유를 알아낼 수는 있지만 어디에서 fileName
입니까? 그리고 비동기 메서드에 올바른 매개 변수 (RemoteFileInfo 및 GUID 설정)가있는 이유는 무엇입니까? 내 동기화 기능에 이러한 매개 변수가 필요하지만 그것을 어떻게 얻을 수 있는지, 왜 svcutils.exe가이 출력을 내는지 설명하지 못합니다.
,이 댓글이 실제로 솔루션입니다 그 상황 중 하나입니다, 그것은했다! 답으로 게시하면 해결책으로 표시 할 수 있습니다! 고맙습니다.이 사실을 더 잘 이해하기 위해 WCF를 공부해야합니다. – HypeZ