Использование веб-службы WCF с использованием Objective-C на iPhone

Процесс преобразования для C ++ описывается как обычные арифметические преобразования . Тем не менее, я думаю, что наиболее релевантное правило находится в разделе подкатегории conv.prom: Интегральные рекламные акции 4.6.1 :

Значение целочисленного типа, отличного от bool, char16_t, char32_t или wchar_t, чей целочисленный ранг преобразования ([conv.rank]) меньше ранга int, может быть преобразован в prvalue типа int, если int может представлять все значения типа источника; в противном случае исходное значение prvalue может быть преобразовано в prvalue типа unsigned int.

blockquote>

Самое смешное, что есть слово «can», которое, я думаю, предполагает, что эта акция выполняется по усмотрению компилятора.

Я также нашел этот фрагмент C-spec, который намекает на отсутствие продвижения:

11   EXAMPLE 2       In executing the fragment
              char c1, c2;
              /* ... */
              c1 = c1 + c2;
     the ``integer promotions'' require that the abstract machine promote the value of each variable to int size
     and then add the two ints and truncate the sum. Provided the addition of two chars can be done without
     overflow, or with overflow wrapping silently to produce the correct result, the actual execution need only
     produce the same result, possibly omitting the promotions.

Существует также определение «ранга» . Список правил довольно длинный, но поскольку он применим к этому вопросу, «ранг» прост:

Ранг любого беззнакового целочисленного типа должен быть равен ранга соответствующего знакового целочисленного типа.

blockquote>

37
задан Abizern 22 July 2011 в 10:06
поделиться

6 ответов

Спасибо всем, кто здесь помог. В итоге я понял это и подумал, что поделюсь своими результатами. Я знаю, что это не всеобъемлющее решение, поэтому напишите мне сообщение или комментарий, если вам потребуется более подробная информация.

//Variables used
NSMutableData *webData;
NSMutableString *soapResults;
NSXMLParser *xmlParser;
BOOL recordResults;

//Web Service Call
NSString *soapMessage = [NSString stringWithFormat:
@"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<SOAP-ENV:Envelope \n"
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" \n"
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n" 
"xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" \n"
"SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" \n"
"xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"> \n"
"<SOAP-ENV:Body> \n"
"<Login xmlns=\"http://tempuri.org/\"><username>JACKSON</username><password>PASSWORD</password>"
"</Login> \n"
"</SOAP-ENV:Body> \n"
"</SOAP-ENV:Envelope>"];

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
46
ответ дан 27 November 2019 в 04:47
поделиться

Лично я бы рекомендовал добавить конечную точку на основе REST для службы WCF. Вы можете запускать его одновременно с SOAP, и его намного проще использовать на стороне iPhone.

http://msdn.microsoft.com/en-us/library/dd203052.aspx

10
ответ дан 27 November 2019 в 04:47
поделиться

Какого рода ошибку вы получаете при обращении к нашей службе WCF? Итак, asmx работает, но не WCF? Следует обратить внимание на то, что в .NET 2.0 веб-службы (asmx) поддерживали сообщения SOAP 1.1 и SOAP 1.2. Однако basicHttpBinding в WCF обрабатывает только SOAP 1.1. Поэтому, если вы отправляете сообщения SOAP 1.2 со своего клиента iPhone в службу WCF с помощью basicHttpBinding, это вполне может быть вашей проблемой. Для поддержки SOAP 1.2 вам необходимо использовать wsHttpBinding или создать настраиваемую привязку, почти такую ​​же, как basicHttpBinding, но вы указываете версию сообщения как SOAP 1.2.

<customBinding>
  <binding name="customHttpBindingWithSoap12">
     <textMessageEncoding messageVersion="Soap12"/>
     <httpTransport />              
  </binding>
</customBinding>   
2
ответ дан 27 November 2019 в 04:47
поделиться

Пытались ли вы получить доступ к службе WCF как к веб-службе из клиента Windows? Я не настраивал WCF для работы в качестве веб-службы в стиле asmx, но я считаю, что есть некоторые конкретные параметры, которые необходимо настроить, чтобы WCF действовал таким образом. Работа с клиентом Windows устранит любые проблемы, связанные с iphone, в целях тестирования и поможет сузить область тестирования до самой службы.

0
ответ дан 27 November 2019 в 04:47
поделиться

Вам необходимо убедиться, что вы используете BasicHttpBinding (а не WSHttpBinding), который в большей степени предназначен для клиентов, не работающих на платформе .NET 3.0. Эта привязка не поддерживает безопасность, надежность или упорядоченную доставку.

0
ответ дан 27 November 2019 в 04:47
поделиться

Caged / httpriot Простая библиотека HTTP Rest для проектов iPhone и Cocoa.

1
ответ дан 27 November 2019 в 04:47
поделиться