C# 调用asmx webservice时如何发送base64Binary的数据

C# 调用asmx webservice时如何发送base64Binary的数据,c#,web-services,asmx,C#,Web Services,Asmx,我必须调用一个ASMXWebService,它接受AttachmentData作为参数。此成员的类型为base64Binary <s:complexType name="AttachmentData"> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="FileName" type="s:string" /> <s:element minOccurs="0" maxOccurs="1"

我必须调用一个ASMXWebService,它接受AttachmentData作为参数。此成员的类型为base64Binary

<s:complexType name="AttachmentData">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="FileName" type="s:string" /> 
<s:element minOccurs="0" maxOccurs="1" name="UploadedUserName" type="s:string" /> 
<s:element minOccurs="0" maxOccurs="1" name="Attachment" type="s:base64Binary" /> 
</s:sequence>
</s:complexType>
这是发送base64Binary的正确方法吗?我是否需要将文件内容编码到base64,还是在运行中完成?我试图通过使用上述代码来查看是否不必要地增大了webservice请求的大小。

输入中每3个字节需要4个字节的输出,因此会有一点开销,但不会太大

Base64编码的好处在于它只使用可打印字符,因此很容易嵌入HTTP协议中,该协议是为处理人类可读的文本字符而构建的


在您的代码示例中,字节[]缓冲区在放到线路上(即嵌入并在HTTP协议中传输)之前会自动转换为基64。

您对此代码有问题吗?没有,它工作正常,但我只是在考虑请求的大小。只是想看看是否有更好的方法可以在请求时使用更小的尺寸来实现同样的效果。此外,我还试图了解字节数组如何转换为base64Binary,以及字节数组和base64Binary在大小上的区别。
//read the file contents
byte[] buffer = null;
     try {
        FileInfo attachment = new FileInfo(filepath);
        using (FileStream stream = attachment.OpenRead()) {
           if (stream.Length > 0) {
              buffer = new byte[stream.Length];
              stream.Read(buffer, 0, (int)stream.Length);
           }
        }
     }
     catch {
        buffer = null;
     }

//create AttachmentData object
WebSrvc.AttachmentData att = new WebSrvc.AttachmentData();
att.FileName = fileName;
att.Attachment = buffer;