xmlparsing错误,同时使用wcf框架的Web服务

这是第一次,而我的工作在iOS应用程序的wcf肥皂服务,当尝试发送xml到服务器使用post方法时,我的iOS边代码看起来像这样

NSString *soapMessage = [NSString stringWithFormat:@"<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"><SOAP-ENV:Body><SaveAllRecords33><xmlData></xmlData></SaveAllRecords33></SOAP-ENV:Body></SOAP-ENV:Envelope>"]; NSURL *url = [NSURL URLWithString:@"http://webservice.net2survey.com/servicejson.svc/SaveAllRecord33"]; NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]]; [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [theRequest addValue: @"urn:ServiceJSON/SaveAllRecords33" forHTTPHeaderField:@"SOAPAction"]; [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; [theRequest setHTTPMethod:@"POST"]; [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

并在.net方面是这样的

 [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json)] [OperationContract] public string SaveAllRecords33(string xmlData) { //DataContractSerializer dataContract = new DataContractSerializer(typeof(string)); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlData); JavaScriptSerializer objSerialiver = new JavaScriptSerializer(); return "{\"Answer\":" + objSerialiver.Serialize(xmlDoc.InnerXml) + "}"; } 

当瞄准打这个url时,它显示出一些错误,如下图所示

 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode><faultstring xml:lang="en-US">Root element is missing.</faultstring><detail><ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><HelpLink i:nil="true"/><InnerException i:nil="true"/><Message>Root element is missing.</Message><StackTrace> at System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res)
 at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
 at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
 at System.Xml.XmlDocument.Load(XmlReader reader)
 at System.Xml.XmlDocument.LoadXml(String xml)
 at WcfService.ServiceJSON.SaveAllRecords33(String xmlData)
 at SyncInvokeSaveAllRecords33(Object , Object[] , Object[] )
 at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp; outputs)
 at System.S 2012-09-25 17:50:00.846 Net2Survey_demo[1576:b903] str: erviceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp; rpc)
 at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace><Type>System.Xml.XmlException</Type></ExceptionDetail></detail></s:Fault></s:Body></s:Envelope> 

服务本身起作用,问题不在于WCF。 如果在堆栈轨迹中向右滚动,则会看到它说Root element is missing. 并且在你的服务中创buildXmlDocument时失败。

你只是简单地发送一个无效的Xmlstring,它parsing失败。

我打电话给这种types的WCF Web服务尝试调用可能是它的帮助..)

  -(void)ViewWillAppear { NSString *soapMsg = [NSString stringWithFormat:@"<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope\">" "<ToPostalCode>%@</ToPostalCode>" "<FromPostalCode>%@</FromPostalCode>" "<Weight>%@</Weight>" "<DeliveryServiceName></DeliveryServiceName>" "</SingaporePostalInfoDetailsRequest>",txtToPostalCode.text,txtFrmPostalCode.text,txtWeight.text]; NSURL *url = [NSURL URLWithString: @http://webservice.net2survey.com/servicejson.svc/basic"]; NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url]; NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMsg length]]; [req addValue:@"application/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [req addValue:@"http://webservice.net2survey.com/servicejson.svc/basic" forHTTPHeaderField:@"SOAPAction"]; [req addValue:msgLength forHTTPHeaderField:@"Content-Length"]; [req setHTTPMethod:@"POST"]; [req setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]]; conn = [[NSURLConnection alloc] initWithRequest:req delegate:self]; if (conn) { webData = [[NSMutableData data] retain]; } objAppDelegate.arrGlbPostageSing = [[NSMutableArray alloc]init]; }