2014-01-13 47 views
0

我正在寫一個.net 3.5解決方案,它佔用了第三方WCF web服務。 SOAP服務的代理客戶端由VisualStudio生成,作爲服務引用。如何從WCF SOAP響應中提取二進制附件?

從服務A SOAP響應包括在數據的附件,如我可以在提琴手看到它。附件有一個指向CID參考的href字段。該VS 2012返回其包括附件不包括任何二進制數據對象時,但它確實包括與在它的CID參考href字段已創建的代理客戶端。

作爲使用招捕獲,這是SOAP響應附加數據包括該CID:XXXX REF:

<attachments> 
     <cmn:attachment href="cid:52b2d8a50035921e80bf1540" len="309" name="DOC1.rtf" type="application/rtf" xmime:contentType="application/rtf"/> 
</attachments> 

而且在提琴手的原始輸出,連接數據可以與匹配CID可以看出:XXXX參考:

------=_Part_22_12445037.1389617382038 
Content-Type: application/rtf 
Content-Location: DOC1.rtf 
Content-ID: <52b2d8a50035921e80bf1540> 
Content-Transfer-Encoding: binary 

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 Calibri;}} 
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang9\f0\fs22 Doc 1\par 
\par 
Test information inside an attachment for KM retrieval.\par 
\par 
Here's something else I've written for use in testing.\par 
} 

這裏是從返回的對象的可用字段的屏幕截圖:

fields available

如何訪問附件數據,所以我其實可以下載的文件?

回答

0

原來,問題是由於第三方API返回響應的方式,MTOM數據格式不正確,所以WCF忽略了二進制數據。

我解決這個問題的方法是使用定製類,它基本上使用HttpRequest直接與Web服務對話並從響應中提取/解析二進制數據。

+0

你能和我們分享這個定製課程的來源嗎? –

0

通常在使用WCF和SOAP時,您的文件二進制文件會在您的響應中的某處編碼爲base64字符串,但是我沒有看到您在此處發佈的那種長數據字符串。

如果你在這裏顯示的只是響應的頭部,你也可以檢查響應消息的主體,因爲頭部有一個大小限制,但是消息沒有正文 - 所以它是這樣的二進制有效載荷的可能位置。

+0

返回的數據來自Visual Studio代理生成的類,這些類是在創建服務引用時創建的。我仔細看過返回的數據,看不到任何字節數組或長數據字符串,它們會提示附件數據。 –

0

在你要返回的實體之一中返回一個字節[]會不會更容易,然後在你的客戶機上工作以重建文件?

是否使用MTOM?因爲WCF does not support SwA (Soap with attachments) out of the box.

+0

的實體就是當我創建的服務參考SOAP Web服務由Visual Studio自動創建。它使用MTOM(當我使用文本時會引發錯誤),而我正在使用BasicHttpBinding,那會是一個問題嗎? –

相關問題