Consuma o serviço da Web WCF usando o Objective-C no iPhone

Estou tendo dificuldade em consumir um serviço Web WCF muito simples (Hello World) no meu aplicativo para iPhone. Pelo que li, você deve criar manualmente a mensagem de solicitação e enviá-la para a URL do serviço da web.

Consegui fazer isso em um serviço da Web .asmx, mas não em um serviço WCF.

Como sei o formato correto da mensagem SOAP da solicitação?

O serviço da web que estou tentando acessar tem um formato de: http://xxx.xxx.xxx.xxx:PORT/IService1/ (executando localmente em uma VM)

Peço desculpas pela falta de informação, estou bastante perdido.

Toda e qualquer ajuda é muito apreciada.

Obrigado a todos que ajudaram aqui. Acabei descobrindo e pensei em compartilhar meus resultados. Eu sei que esta não é uma solução abrangente, então envie uma mensagem ou comentário se precisar de mais detalhes.

//Variables used NSMutableData *webData; NSMutableString *soapResults; NSXMLParser *xmlParser; BOOL recordResults; //Web Service Call NSString *soapMessage = [NSString stringWithFormat: @"\n" " \n" " \n" "JACKSONPASSWORD" " \n" " \n" ""]; NSURL *url = [NSURL URLWithString:@"http://172.16.0.142:8731/Service1/"]; NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]]; [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [theRequest addValue: @"http://tempuri.org/IService1/Login" forHTTPHeaderField:@"Soapaction"]; [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; [theRequest setHTTPMethod:@"POST"]; [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; if(theConnection) { webData = [[NSMutableData data] retain]; } else { NSLog(@"theConnection is NULL"); } //Implement the NSURL and XMLParser protocols #pragma mark - #pragma mark NSURLConnection methods - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error - (void)connectionDidFinishLoading:(NSURLConnection *)connection #pragma mark - #pragma mark XMLParser methods -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 

Pessoalmente, eu recomendaria adicionar um ponto de extremidade baseado em REST para o serviço WCF. Você pode executá-lo simultaneamente com o SOAP e é muito mais fácil de consumir no lado do iPhone.

http://msdn.microsoft.com/pt-br/library/dd203052.aspx

Que tipo de erro você está recebendo ao acessar nosso serviço WCF? Então asmx está funcionando, mas não o WCF? Uma coisa que você precisa prestar atenção é que no .NET 2.0, os serviços da Web (asmx) suportavam as mensagens SOAP 1.1 e SOAP 1.2. No entanto, basicHttpBinding no WCF manipula somente o SOAP 1.1. Portanto, se você estiver enviando mensagens SOAP 1.2 do seu cliente do iPhone para o serviço WCF com basicHttpBinding, isso pode muito bem ser o problema que você está tendo. Para suportar o SOAP 1.2, você precisa usar o wsHttpBinding ou criar uma binding personalizada praticamente igual à basicHttpBinding, mas especificar a versão da mensagem como SOAP 1.2.

       

Caged / httpriot Simple HTTP Rest Library para projetos do iPhone e do Cocoa.

Você já tentou acessar o serviço WCF como um serviço da Web de um cliente do Windows? Eu não configurei o WCF para ser executado como um serviço da Web estilo asmx, mas acredito que há algumas configurações específicas que precisam ser ajustadas para que o WCF aja dessa maneira. Trabalhar com um cliente do Windows eliminaria todos os problemas com base no iPhone fora da imagem para fins de teste e ajudaria a restringir seus testes ao próprio serviço.

Você precisa se certificar de que você está usando BasicHttpBinding (não WSHttpBinding) que é destinado mais são os clientes que não estão na plataforma .NET 3.0. Esta binding não suporta segurança, confiabilidade ou entrega ordenada.