2013-03-07 80 views
0

我將不勝感激,如果有人可以在此提供一些線索:WCF配置與MTOM編碼和basicHttpBinding的不工作 - 做base64編碼

我想通過MTOM上傳二進制數據的服務。

如果我配置與端點綁定:

<wsHttpBinding> 
    <binding name="WsHttpMtomBinding" messageEncoding="Mtom" /> 

MTOM工程 - 我可以在小提琴手看到二進制內容與MTOM發送。

如果我和配置它:

<basicHttpBinding> 
    <binding name="WsHttpMtomBinding" messageEncoding="Mtom" /> 

它得到的base64如果我看的小提琴手什麼是發送編碼。

我讀過如果消息大小小於特定大小,WCF將執行base64編碼。我確信二進制內容足夠大。我必須使用basicHttpBinding,因爲服務不在我的控制之下。

爲什麼得到base64編碼?

回答

2

發現問題: 問題是WSDL提供給我的。 WSDL中的類型被設置爲HexBinary而不是Base64Binary。 WCF將只識別base64以優化MTOM。最重要的是,如果二進制數據低於1024字節,它不會使用MTOM。 (該消息的報頭仍然將顯示它是MTOM雖然)

摘自MSDN: 「MTOM的目的是以編碼SOAP消息來優化base64編碼數據下面是約束的列表: R4151:任何包含base64編碼數據的元素信息項都可能被優化

B4152:WCF優化包含base64編碼數據並超過1024個字節長的元素信息項。

希望這有助於某人。花了我的時間來弄清楚這一點。