繁体   English   中英

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

[英]Svcutil.exe generates wrong method types

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

  1. 通用逻辑
  2. 客户
  3. 服务器

ClientServer导入Common Logic

我的服务器有一个名为GetNextFile的方法。 这里的接口实现:

[OperationContract]
RemoteFileInfo GetNextFile(GUIDSetting GUID);

这里的RemoteFileInfoGUIDSetting如下所示:

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

为什么会这样呢? 我可以尝试找出为什么将LenghtStatusStream作为out参数,但是fileName在哪里? 以及为什么异步方法具有正确的参数( RemoteFileInfoGUIDSetting )? 我在同步功能上需要这些参数,但是我不知道如何实现以及为什么svcutils.exe会给我这个输出

如果您不需要特别控制SOAP结构的构成方式,请尝试使用DataContract而不是MessageContract。

例如:

[DataContract]
public class GUIDSetting
{
    [DataMember]
    public string Guid;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM