C# Svcutil.exe生成错误的方法类型

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; }

WCF新手在这里。 在我的解决方案中,我有3个项目:

共同逻辑 客户 服务器 客户端和服务器都导入公共逻辑

我的服务器有一个名为GetNextFile的方法。以下是接口实现:

[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来更好地理解这一点