2013-09-25 2 views
0

У меня есть другие сообщения, в которых я работал с отправкой данных на принтер UPnP. В основном создание контрольной точки с нуля (это все еще POC, и я буду реализовывать несколько типов устройств, поэтому сначала я хочу получить базовое понимание). Пока я могу открыть принтер, запросить задание на печать и вернуть URL-адрес приемника данных для публикации печатаемого контента. На данный момент я пытаюсь пост с простыми данными Xhtml, но запрос, кажется, тайм-аут каждый раз, за ​​исключением следующего:UPnP POST to Printers Data Sink URI

The remote server returned an error: NotFound. 
at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) 
at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result) 
at System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result) 

Если я ударил URL в браузере, я получаю обратно HTTP 405 Method Not Allowed

Мне интересно, игнорирует ли сервер сообщение из-за плохих данных, или я пропускаю заголовки или что-то в этом роде.

Я уже прошел через документы на upnp.org для службы Printer Basic вместе с SOAP 1.1 UPnP Profile, оба из которых очень помогли получить, насколько я знаю.

У кого-нибудь есть мысли?

Вот копия моего XHTML:

<?xml version=\"1.0\" encoding=\"UTF-8\"?> 
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML-Print 1.0//EN\" \"http://www.w3.org/MarkUp/DTD/xhtml-print10.dtd\"> 
<html xmlns=\"http://www.w3.org/1999/xhtml\"> 
    <head> 
    <title>test</title> 
    </head> 
    <body> 
    <div>hello world</div> 
    </body> 
</html> 

Я использую C# для создания и отправки HttpWebRequest. Вот код, который делает это (у меня есть пара вариантов, другие с помощью WebClient)

private void SendToPrinter(string printUri, string content) 
    { 
     var request = WebRequest.Create(new Uri(printUri)) as HttpWebRequest; 
     request.Method = "POST"; 
     request.ContentType = "text/xml; charset=\"utf-8\""; 
     request.ContentLength = content.Length; 
     request.Headers[SoapHeaderName] = CreateJobHeader; // this probably isn't necessary 

     request.BeginGetRequestStream(ar => 
     { 
      var requestStream = request.EndGetRequestStream(ar); 
      using (var sw = new StreamWriter(requestStream)) 
      { 
       sw.Write(content); 
       sw.Close(); 
      } 

      request.BeginGetResponse(a => 
      { 
       var response = request.EndGetResponse(a); 
       var responseStream = response.GetResponseStream(); 
       using (var sr = new StreamReader(responseStream)) 
       { 
        var results = sr.ReadToEnd(); 
       } 

      }, null); 

     }, null); 
    } 

сырья разместить данные стельки

POST http://10.20.201.90/upnp/print/1d153438-1e90-1f0b-8b54-984be15df0fe HTTP/1.1 
Content-Type: text/xml; charset="utf-8" 
SOAPACTION: "urn:schemas-upnp-org:device:Printer:1#SendDocument" 
Host: 10.20.201.90 
Content-Length: 482 
Expect: 100-continue 

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;s:Envelope xmlns:s=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;&gt;&lt;s:Body&gt;&lt;u:SendDocument xmlns:u=&quot;urn:schemas-upnp-org:device:Printer:1&quot;&gt;&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;head&gt;&lt;title&gt;test&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;div&gt;hello world&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;&lt;/u:SendDocument&gt;&lt;/s:Body&gt;&lt;/s:Envelope&gt; 
+0

Является бродячая '" 'после закрытия тега HTML опечатка? Вы помнить, чтобы избежать XHTML, если его внутри SOAP messsage. Если ни один из этих помощи, вы можете показать все POST (т.е. HTTP заголовков + SOAP, а также xhtml)? – simonc

+0

Конец цитаты был типом. Я обновлю вопрос с моими данными запроса. – earthling

+0

Вы не указали тело запроса. Каково значение 'content' в' SendToPrinter'? Вы форматируете его как сообщение SOAP? – simonc

ответ

0

Один вопроса, который держал меня от печати в том, что принтер был задан вопрос о том, из какого лотка будет печататься. Это заблокировало сообщение от печати. Вот окончательное сообщение SOAP. Я не избежал этого.

<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"> 
    <s:Body> 
    <html xmlns=\"http://www.w3.org/1999/xhtml\"> 
     <head><title>test</title></head> 
     <body><div>hello world</div></body> 
    </html> 
    </s:Body> 
</s:Envelope>