WCF新手在这里。 在我的解决方案中,我有3个项目:
Client
和Server
导入Common Logic
。
我的服务器有一个名为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生成我的代理时,我使用以下参数:
svcutil.exe /language:cs /out:generatedProxy.cs /config:app.config http://localhost:8001/MyService/
但生成的代理中的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
在哪里?为什么Async方法有正确的参数( RemoteFileInfo 和 GUIDSetting )?我在同步功能上需要这些参数,但我不知道如何实现它以及为什么svcutils.exe给我这个输出
答案 0 :(得分:0)
如果您没有特别需要控制SOAP结构的组成方式,那么请尝试使用DataContract而不是MessageContract。
例如:
[DataContract]
public class GUIDSetting
{
[DataMember]
public string Guid;
}