我正在开发一个需要上传文件的WCF Web服务,除此之外还有其他功能。
目前添加“平面图”项目的方法如下:
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "Floorplan?token={token}&floorplan={floorplan}")]
string XmlInputFloorplan(string token, string floorplan);
我需要修改它,以便在调用时上传图像作为其中的一部分,并可在类似以下方法中使用:
public static Guid AddFile(byte[] stream, string type);
在这种情况下,
byte[]
是图像的内容。然后将生成的GUID传递给数据层,完成了平面图的添加。因此,我需要弄清楚两件事:
1)我应该如何更改
XmlInputFloorplan
接口方法,以便它也允许一个图像作为参数?2)在修改后,我如何使用该服务?
谢谢!
以下是我的解决方案:
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "Floorplan")]
XmlDocument XmlInputFloorplan(Stream content);
需要输入以下格式的XML:
<?xml version="1.0" encoding="us-ascii" ?>
<CreateFloorplanRequest>
<Token></Token>
<Floorplan></Floorplan>
<Image></Image>
</CreateFloorplanRequest>
图片包含一个表示图像文件的base64编码字符串,我通过以下方式将其转换为byte[]:
XmlDocument doc = new XmlDocument();
doc.Load(content);
content.Close();
XmlElement body = doc.DocumentElement;
byte[] imageBytes = Convert.FromBase64String(body.ChildNodes[2].InnerText);
为了实现这一点,我必须像这样配置 Web.config:
<service behaviorConfiguration="someBehavior" name="blah.blahblah">
<endpoint
address="DataEntry"
behaviorConfiguration="web"
binding="webHttpBinding"
bindingConfiguration="basicBinding"
contract="blah.IDataEntry" />
</service>
<bindings>
<webHttpBinding>
<binding name="basicBinding" maxReceivedMessageSize ="50000000"
maxBufferPoolSize="50000000" >
<readerQuotas maxDepth="500000000"
maxArrayLength="500000000" maxBytesPerRead="500000000"
maxNameTableCharCount="500000000" maxStringContentLength="500000000"/>
<security mode="None"/>
</binding>
</webHttpBinding>
</bindings>
Stream
参数。 - FlyingStreudel