编程语言
首页 > 编程语言> > c# – 调用asmx webservice时如何为base64Binary发送数据

c# – 调用asmx webservice时如何为base64Binary发送数据

作者:互联网

我必须调用asmx webservice,它接受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>

我发送附件成员的文件内容如下:

//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;

这是发送base64Binary的正确方法吗?我是否需要将文件内容编码为base64或者是否即时完成?我试图看看如果通过使用上面的代码我不必要地膨胀webservice请求的大小.

解决方法:

对于输入中的每3个字节,一个Base 64 encoding在输出中需要4个字节,所以有一点开销但不是那么多.

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

在您的代码示例中,byte []缓冲区在被放置在线路上之前自动转换为Base 64(即在HTTP协议中嵌入和传输).

标签:c,web-services,asmx
来源: https://codeday.me/bug/20190629/1328377.html