Использование MessageContract сбои службы WCF при запуске

Я пытаюсь добавить MessageContract к моей службе WCF, аналогично тому, что происходит в этом вопросе: WCF: использование потоковой передачи с контрактами сообщений

вот исключение, которое я получаю: операция "UploadFile" не может быть загружена, поскольку она имеет параметр или возвращаемый тип типа System.Средство servicemodel.Каналы.Сообщение или тип, который имеет MessageContractAttribute и другие параметры различных типов. При использовании системы.Средство servicemodel.Каналы.Сообщение или типы с 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; }
}

и вот конфигурация привязки, которую я использую в своем приложении.config:

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

сейчас я думаю, что это может быть связано с типом привязки я использую, но я не совсем уверен.

2 ответов


из комментариев похоже, что у вас есть проблема, что как только вы начнете использовать контракты сообщений, вы должны использовать их для всех параметров, что означает, что ваш метод не может вернуть 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