2013-01-31 84 views
4

我必須在Windows Phone 8應用程序上使用webservices(WSDL),但它在VS2012中不起作用。WSDL與Windows Phone 8兼容嗎?

例如:

http://chennaiemergency.co.in/sree/s2.php?wsdl

  1. 右鍵單擊項目>添加服務參考
  2. 的URL地址的textBox
  3. 點擊 「開始」 按鈕粘貼
  4. 該服務隨所有操作出現
  5. 點擊「ok」

該服務被添加,但並沒有什麼關於我的reference.cs操作...

是否有其他的方式來使用我的WSDL?

回答

4

我發現這個問題的最佳方式是手動發送SOAP請求。 SOAP和wsdl與WP不是很兼容。如果你有選擇,也許爲你的Web服務選擇一個WCF。我的代碼爲一個Windows窗體應用程序中的肥皂請求(在一個WP項目中,你必須使用異步方法 - > beginGetRequestStream()& beginGetResponse()。關於這個msdn有很多文檔):

 // Building of my XML 
     XNamespace env = "http://schemas.xmlsoap.org/soap/envelope/"; 
     XNamespace xsd = "http://www.w3.org/2001/XMLSchema"; 
     XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance"; 
     XNamespace enc = "http://schemas.xmlsoap.org/soap/encoding/"; 
     XNamespace typens = "urn:..."; 
     XNamespace xsiType = "xsd:string"; 
     XElement soapEnv = new XElement(env + "Envelope", 
      new XAttribute(XNamespace.Xmlns + "SOAP-ENV",env.NamespaceName), 
      new XAttribute(XNamespace.Xmlns + "xsd", xsd.NamespaceName), 
      new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), 
      new XElement(env + "Body", 
       new XAttribute(env + "encodingStyle",enc.NamespaceName), 
        new XElement(typens + "MethodName", 
         new XAttribute(XNamespace.Xmlns + "typens",typens.NamespaceName), 
         new XElement("elementName", 
          new XAttribute(xsi + "type",xsiType.NamespaceName), "...value"), 
         new XElement("elementName", 
          new XAttribute(xsi + "type",xsiType.NamespaceName),"...value"), 
         new XElement("elementName", 
          new XAttribute(xsi + "type",xsiType.NamespaceName),"...value") 
     ))); 

     // HTTPWEBREQUEST 
     HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("...url..."); 
     webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
     webRequest.Method = "POST"; 
     webRequest.KeepAlive = false; 
     webRequest.ContentType = "text/xml; charset=utf-8"; 
     webRequest.CookieContainer = new CookieContainer(); 

     webRequest.Headers.Add("SOAPAction", "...webservice link..."); 
     webRequest.ProtocolVersion = new Version(1,1); 
     webRequest.Timeout = 1000; 


     using (StreamWriter stream = new StreamWriter(webRequest.GetRequestStream())) 
     { 
      stream.Write(soapEnv); 
      stream.Flush(); 
      stream.Close();    
     } 


     using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse()) 
     { 
      using (StreamReader responseReader = new StreamReader(webResponse.GetResponseStream())) 
      { 
       if (responseReader != null) 
       { 
        .....code.... 
        webResponse.Close(); 
       } 
      }    
     } 
+1

-1,我希望我可以兩次下調。不要**通過字符串操作構建XML。此外,您在WebResponse和StreamReader上缺少'使用'塊。 –

+0

謝謝你的評論約翰!我要改進代碼! – monstergold

+0

編輯:添加使用塊+ linq構建XML。謝謝約翰桑德斯! – monstergold