C# Svcutil.exe生成错误的方法类型
WCF新手在这里。 在我的解决方案中,我有3个项目: 共同逻辑 客户 服务器 客户端和服务器都导入公共逻辑 我的服务器有一个名为GetNextFile的方法。以下是接口实现:C# Svcutil.exe生成错误的方法类型,c#,wcf,svcutil.exe,C#,Wcf,Svcutil.exe,WCF新手在这里。 在我的解决方案中,我有3个项目: 共同逻辑 客户 服务器 客户端和服务器都导入公共逻辑 我的服务器有一个名为GetNextFile的方法。以下是接口实现: [OperationContract] RemoteFileInfo GetNextFile(GUIDSetting GUID); public RemoteFileInfo GetNextFile(GUIDSetting GUIDRequested) { //stuff return result; }
[OperationContract]
RemoteFileInfo GetNextFile(GUIDSetting GUID);
public RemoteFileInfo GetNextFile(GUIDSetting GUIDRequested)
{
//stuff
return result;
}
以下是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;
}
}
}
下面是实际实现的一个片段:
[OperationContract]
RemoteFileInfo GetNextFile(GUIDSetting GUID);
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在哪里?为什么异步方法有正确的参数RemoteFileInfo和GUIDSetting?我需要sync函数中的这些参数,但我不知道如何实现它,也不知道svcutils.exe为什么会给我这个输出如果您不特别需要控制SOAP结构的组成方式,那么请尝试使用DataContract而不是MessageContract 例如:
[DataContract]
public class GUIDSetting
{
[DataMember]
public string Guid;
}
嗯,这是其中一种情况,当评论实际上是一个解决方案时,它起了作用!如果你把它作为一个答案发布,我可以把它标记为解决方案!谢谢,我真的需要学习WCF来更好地理解这一点