При использовании MessageContract происходит сбой службы WCF при запуске - PullRequest
6 голосов
/ 24 мая 2011

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

Вот исключение, которое я получаю: Операция «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>

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

Ответы [ 2 ]

7 голосов
/ 24 мая 2011

Из комментариев видно, что у вас проблема в том, что как только вы начинаете использовать контракты сообщений, вы должны использовать их для всех параметров, что означает, что ваш метод не может вернуть bool, он должен вернуть другой контракт сообщений, например, FileUploadResult.

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

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

0 голосов
/ 10 апреля 2014

Это в основном означает, что конкретная операция использует комбинацию типов контракта сообщений и типов примитивов в любой из следующих комбинаций:

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

...