MessageContract的使用在启动时使WCF服务崩溃

本文关键字:WCF 服务 崩溃 MessageContract 启动 | 更新日期: 2023-09-27 17:57:42

我正试图将MessageContract添加到我的WCF服务中,类似于这个问题中发生的事情:WCF:使用带有Message Contracts 的流

以下是我得到的例外:无法加载操作"UploadFile",因为它具有System.ServiceModel.Channels.Message类型的参数或返回类型,或者具有MessageContractAttribute和其他不同类型参数的类型。当使用System.ServiceModel.Channels.Message或具有MessageContractAttribute的类型时,该方法不能使用任何其他类型的参数

这是我的合同:

[ServiceContract]
public interface IFile
{
    [OperationContract]
    bool UploadFile(FileUpload upload);
}
[MessageContract]
public class FileUpload
{
    [MessageHeader(MustUnderstand = true)]
    public int Username { get; set; }
    [MessageHeader(MustUnderstand = true)]
    public string Filename { get; set; }
    [MessageBodyMember(Order = 1)]
    public Stream ByteStream { get; set; }
}

下面是我在app.config:中使用的绑定配置

  <netTcpBinding>
    <binding name="TCPConfiguration" maxReceivedMessageSize="67108864" transferMode="Streamed">
      <security mode="None" />
    </binding>
  </netTcpBinding>

现在我想这可能与我使用的绑定类型有关,但我不完全确定。

MessageContract的使用在启动时使WCF服务崩溃

从注释中可以看出,一旦开始使用消息约定,您就必须将其用于所有参数,whcih意味着您的方法不能返回bool,它必须返回另一个消息约定,如FileUploadResult。

尝试将其更改为返回void,并查看它是否加载,以及是否确实将其更改以返回一个类,该类被改为消息协定。

此MSDN页面上的第一条注释警告了此问题,并包含一个链接,该链接可能会提供更多信息。

这基本上意味着一个特定的操作在以下任何组合中使用消息约定类型和基元类型的组合:

MixType1: Contract type and primitive types as operation parameters
MixType2: Contract type as a parameter and primitive type as return type
MixType3: Primitive type as a parameter and Contract type as return type

上面列出的任何场景都会产生错误。

更多详细信息:http://www.codeproject.com/Articles/199543/WCF-Service-operations-can-t-be-loaded-due-to-mixi