我正在開發一個WCF Web服務,它需要能夠上傳其他文件。WCF REST文件上傳
目前我添加一個「佈局規劃」項目的方法是這樣的:
[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>
和圖像包含表示我轉換爲字節的圖像文件的基64編碼的串[]通過:
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
什麼叫你在哪裏? –
這是說,對於一篇文章,它只需要一個參數調用流。我最終刪除了所有參數,只是在流中發送一個xml文件。我仍然接受這個答案,因爲它讓我走上了正確的道路。 – FlyingStreudel