[英]Svcutil.exe generates wrong method types
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
}
这是生成的Async方法:
[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和GUIDSetting )? 我在同步功能上需要这些参数,但是我不知道如何实现以及为什么svcutils.exe会给我这个输出
如果您不需要特别控制SOAP结构的构成方式,请尝试使用DataContract而不是MessageContract。
例如:
[DataContract]
public class GUIDSetting
{
[DataMember]
public string Guid;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.