2014-02-14 3 views
0

cerate가 plist 파일 인 net C# 웹 서비스를 작성했습니다. 작동하지만 사용할 수있는 iOS 앱이 없습니다. iost 코드는 실제 plist 파일에 링크하면 작동하지만 링크가 웹 서비스에 연결되어 있으면 작동하지 않습니다. 내 서비스는 앱을 테스트 한 것과 동일한 plist를 만듭니다. 내가 예 경로로 변경하면 plistpathIOS App .net Webservice에서 plist 가져 오기

내 배열

NSString *plistpath = @"http://test.se/Service.asmx/GetCustomerList/"; 
    NSURL *url = [NSURL URLWithString:plistpath]; 
    // array = [NSArray arrayWithContentsOfURL:url]; 
    array = [[NSArray alloc] initWithContentsOfURL:url]; 

널 "http://test.se/customers.plist" 내 배열 더이상 널 아니다.

.NET 코드 [의 WebMethod] 공공 무효 GetCustomerList은() {

List<Customer> Kundlista = new List<Customer>(); 

    Kundlista.Add(new Customer("Kund 1", "Kläppavägen 1", "0340-651026")); 
    Kundlista.Add(new Customer("Kund 2", "Kläppavägen 2", "0000-651026")); 





    using (MemoryStream respStream = new MemoryStream()) 
    { 
     using (XmlWriter xmlWriter = XmlWriter.Create(respStream, new XmlWriterSettings() { Encoding = System.Text.Encoding.UTF8, Indent = true })) 
     { 
      xmlWriter.WriteStartDocument(); 
      xmlWriter.WriteDocType("plist", "-//Apple//DTD PLIST 1.0//EN","http://www.apple.com/DTDs/PropertyList-1.0.dtd",null); 
      xmlWriter.WriteStartElement("plist"); 
      xmlWriter.WriteStartAttribute("version"); 
      xmlWriter.WriteValue("1.0"); 
      xmlWriter.WriteEndAttribute(); 
      xmlWriter.WriteStartElement("array"); 
     foreach (var customer in Kundlista) 
    { 

     xmlWriter.WriteElementString("string",customer.Name); 
    } 

     xmlWriter.WriteEndElement(); // Close dict element 
     xmlWriter.WriteEndElement(); // close plist element 
     xmlWriter.WriteEndDocument(); 
     xmlWriter.Flush(); 
     xmlWriter.Close(); 
     Context.Response.ContentType = "text/xml"; 
     Context.Response.Output.Write(Encoding.UTF8.GetString(respStream.ToArray())); 
     } 
    } 
} 

내 PLIST

<plist version="1.0"> 
<array> 
<string>Kund 1</string> 
<string>Kund 2</string> 
</array>  
</plist> 
+0

두 경우 모두 데이터가 동일하다는 것을 확인 했습니까 (헤더, 전체 키 세트)? – Wain

+0

붙여 넣기시 내 서비스 출력 내용을 .plist 파일로 복사했습니다. –

답변

0

당신은 쓸 수 (나는 재산의 게시하지 않습니다하지만 그들은 존재) 다음과 같은 확장자 :

public class PListWriter : XmlTextWriter 
{ 
    public PListWriter(string filename, System.Text.Encoding encoding) : base(filename, encoding) { } 
    public PListWriter(Stream filename, System.Text.Encoding encoding) : base(filename, encoding) { } 

    public override void WriteDocType(string name = "", string pubid = "", string sysid = "", string subset = "") 
    { 
     this.WriteRaw("<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">"); 
    } 
} 

그것을 사용하십시오! 예를 들어

는 :

using (var ms = new MemoryStream()) 
     { 
      using (var xml = new PListWriter(ms, System.Text.Encoding.UTF8)) 
      { 
       xml.Formatting = Formatting.Indented; 
       xml.WriteStartDocument(); 
       xml.WriteDocType(); 
       xml.WriteStartElement("plist"); 
       xml.WriteAttributeString("version", "1.0"); 
       xml.WriteStartElement("array"); 

       foreach (var element in customersArray) 
       { 
        xml.WriteStartElement("dict"); 
        xml.WriteElementString("key", "Name"); 
        xml.WriteElementString("string", element.Name); 
        xml.WriteElementString("key", "Code"); 
        xml.WriteElementString("string", element.Code); 
       } 

       xml.WriteEndElement(); 
       xml.WriteFullEndElement(); 

       xml.Flush(); 

       ms.Seek(0, SeekOrigin.Begin); 

       return ms; 
      } 
     } 

그것은 완벽하게 나를 위해 작동합니다.

+0

내 서비스가 작동하지 않습니다. 서비스는 문자열 이름 = "", 문자열 pubid = "", 문자열 sysid = "", 문자열 하위 집합 = "= 연산자와 같이 사용하지 마십시오. –

+0

코드의 일부분을 보여줄 수 있습니까? – melvas

관련 문제