Прокси WCF не генерируется должным образом - PullRequest
0 голосов
/ 15 сентября 2011

У меня есть служба WCF, которая должна вернуть файл из базы данных.Для этого я создал два класса MessageContract, один для ввода и один для вывода.Код выглядит следующим образом:

[MessageContract]
public class AttachmentFile
{
    [MessageHeader(MustUnderstand = true)]
    public Int32 AttachmentID;

    [MessageHeader]
    public String FileName;

    [MessageBodyMember(Order = 1)]
    public Stream Data;

    public AttachmentFile(Attachment att)
    {
        AttachmentID = (Int32)att.AttachmentID;
        FileName = att.FileName;
        Data = new MemoryStream(att.FileBytes);
    }
}

[MessageContract]
public class AttachmentFileID
{
    [MessageBodyMember]
    public Int32 AttachmentID;
}

public AttachmentFile GetAttachmentFile(AttachmentFileID AttachmentID)
{
}

Сгенерированный WSDL выглядит правильно:

<wsdl:operation name="GetAttachmentFile">
    <soap12:operation soapAction="http://tempuri.org/IAttachments/GetAttachmentFile" style="document"/>
    <wsdl:input name="AttachmentFileID">
        <soap12:body use="literal"/>
    </wsdl:input>
    <wsdl:output name="AttachmentFile">
        <soap12:header message="i0:AttachmentFile_Headers" part="AttachmentID" use="literal"/>
        <soap12:header message="i0:AttachmentFile_Headers" part="FileName" use="literal"/>
        <soap12:body use="literal"/>
    </wsdl:output>
</wsdl:operation>

Однако, когда я запускаю svcutil.exe <a href="http://localhost:8002/IAttachments?wsdl" rel="nofollow">http://localhost:8002/IAttachments?wsdl</a>, сгенерированный код выглядит как:

public string GetAttachmentFile(ref int AttachmentID, out System.IO.Stream Data)
{
    AttachmentFileID inValue = new AttachmentFileID();
    inValue.AttachmentID = AttachmentID;
    AttachmentFile retVal = ((IAttachments)(this)).GetAttachmentFile(inValue);
    AttachmentID = retVal.AttachmentID;
    Data = retVal.Data;
    return retVal.FileName;
}

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

1 Ответ

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

При дальнейшем рассмотрении кода переключатель /messageContract исправил один из вызовов только для того, чтобы испортить другой. Однако с помощью параметра / importXmlTypes все исправлено.

...