Тип ссылки изменен в прокси-классе, созданном из WCF - PullRequest
1 голос
/ 02 сентября 2011

Я знаю, что название немного сбивает с толку, поэтому вот объяснение:

Я пытаюсь транслировать большой файл с помощью WCF и знаю, как это сделать.

Когда я писал метод, говорите:

    [OperationContract]
    void sendStream(System.IO.Stream _StreamSource);

Там сгенерированный прокси-класс внутри моего клиентского приложения будет иметь тип System.IO.Stream в качестве входного параметра.

Но если я создам другой класс:

[MessageContract]
[KnownType(typeof(Stream))]
public class MyData
{
    [MessageHeader(MustUnderstand = true)]
    public string Key { get; set; }
    [MessageBodyMember(Order = 1)]
    public Stream Data { get; set; }
}

И имеют сервисный интерфейс:

    [OperationContract]
    void sendStream(MyData _StreamSource);

Тип потока из MyData в моем клиентском классе будет находиться в пространстве имен Service Reference.

т.е.: MyServiceRef.Stream

Что заставило меня не передать поток в WCF.

Но для строковых и целых вещей этого не происходит.

Интересно, почему я считал, что Stream тип известен как string и int?

Или есть ли обходной путь?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

Поток не сериализуем как int или string.Таким образом, вы не можете использовать их в качестве свойства messagecontract.

Однако вы можете использовать потоковую передачу в wcf: http://msdn.microsoft.com/en-us/library/ms731913.aspx,, но для этого необходимо указать поток в качестве уникального параметра.

1 голос
/ 02 сентября 2011

Атрибут KnownType указывает WCF добавить определения типа в ссылку на службу. Похоже, что это также имеет побочный эффект создания любых свойств KnownType внутри DataContract для использования сгенерированного сервисом типа. (Это имеет смысл для обычного использования KnownType, когда WCF иначе не знает о типе.)

Вы пытались использовать контракт без объявления Stream как KnownType?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...