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