2013-09-24 109 views
0

我在嘗試與我的網絡上的UPnP打印機進行交互。我可以發現打印機,獲取可用的服務,甚至可以獲取可用於服務的操作列表。但是,這是我卡住的地方。調用UPnP動作

例如,有一個動作GetPrinterAttributes,我知道我需要創建一個http POST來發送一個請求動作的信封,但我不知道它是什麼樣的。我希望有人可以幫助我指向文檔或任何事情讓我再次去。

基於其他的例子,我嘗試創建請求負載如下:

<s:Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
    <s:Body> 
     <u:GetPrinterAttributes xmlns:u="urn.schemas-upnp-org:device:Printer:1"> 
     </u:GetPrinterAttributes> 
    </s:Body> 
</s:Envelope> 

這是據我可以得到的,但我不知道這些標籤含義。希望在那裏得到一些幫助。

謝謝!

回答

1

您確實正在從零開始實施UPnP控制點:o。必須爲您的平臺使用可用的UPnP庫,這可能會將工作量減少到1-5%。但是我想你知道這樣下去......我只是想確保你明白UPnP不是最簡單的協議,並且爲單個應用程序實現它毫無意義。

我只是將您引用到與我爲SSDP所做的相同的文檔:UDA 1.1 pdf,特別是3.1.1 SOAP Profile。您也可以閱讀實際的SOAP規範,但我認爲UPnP文檔已經足夠完整。 UDA定義了SOAP配置文件幷包含幾個信封示例。它還解釋了包含HTTP POST的外觀(特別是需要的標題)。

關於您的信封(未見過打印機規格):GetPrinterAttributes命名空間錯誤,因爲方法是在服務中定義的,而不是設備。它也缺少最初的<?xml version="1.0">系列。

+0

這看起來像我一直在尋找的文檔,謝謝!現在回頭閱讀並做一些閱讀...... – earthling

+1

最終結果是,我沒有在文檔中聲明的雙引號中的'SOAPACTION'頭的值。因爲沒有'GetPrinterAttributes'的'IN'參數,所以其他的都是非常正確的。我甚至可以把它留在身體標籤之外。 – earthling