Denna delen av 99 uppdateras inte längre utan har arkiverats inför framtiden som ett museum.
Här kan du läsa mer om varför.
Mac-nyheter hittar du på Macradion.com och forumet hittar du via Applebubblan.

Cocoa och databaser

Tråden skapades och har fått 44 svar. Det senaste inlägget skrevs .
  • Medlem
  • Stockholm
  • 2007-01-18 20:34

http://developer.apple.com

Search and you will find

kalleh: Nope, jag har sökt och inte funnit allt jag vill veta. Bara delvis. Det finns en AutoUpdate-applikation som visar hur man anropar en URL och tar hand om svaret, även om jag tycker att exemplet inte är väldigt bra dokumenterat. Kombinerat med det här exemplet jag just fann på nätet så går det nog att pussla ihop bitarna och förstå hur man ska göra, även om man är nybörjare på Cocoa och Objective-C:

http://deusty.blogspot.com/2006/11/sending-http-get-and-post-from-cocoa.html

  • Medlem
  • Stockholm
  • 2007-01-18 22:27

eternit, http://curlhandle.sourceforge.net/ kanske kunde vara nått att bygga vidare på. Fungerade väl för Dan Wood's Watson så.

Det kan vara något. Tyvärr står det "Not Intel/Universal yet." på curlhandles hemsida. Bummer!

Borde finnas gott om tutorials och exempel om hur man anropar web services. Ett verkligen plattformsoberoende gränssnitt, alla kan ju snacka http. Dotnet-exempel finns det hur mycket som helst av, både hur man skapar servicar och hur man använder dem från klienter av olika slag. Klart man kan fixa det själv men det är alltid bäst att följa strömmen och göra på ett standardiserat sätt. Borde nog pröva WSMakeStubs. Hittade en liten tutorial här:

http://www.oreillynet.com/pub/a/mac/2003/02/04/omnigene.html?page=2

  • Medlem
  • Stockholm
  • 2007-01-19 10:41

http://developer.apple.com/samplecode/Cocoa/idxNetworking-date.html

Där finns lite gott och blandat. Det är samma exempelkod som följer med Xcode, så den borde finnas på din HDD.

Mm. Där finns med betoning på lite, gott och blandat.

  • Medlem
  • Stockholm
  • 2007-01-20 02:18
Ursprungligen av eternit:

Mm. Där finns med betoning på lite, gott och blandat.

Det är en defintionsfråga. Kodexemplet ovan finns med där t.ex.

  • Medlem
  • Simrishamn
  • 2007-01-19 21:37
@interface Downloader : NSObject
{
    NSMutableData *data;
}
@end

@implementation Downloader

- (id)init {
	[super init];
	data = [NSMutableData new];

	return self;
}

- (void)dealloc { 
	[data release]; 
}

- (void)download {
	NSURL *url = [NSURL URLWithString:@"http://localhost/tosservices/Service.asmx/GetSomeNumbers"];
	
	NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
	[req setHTTPMethod:@POST];

	NSURLConnection *con = [[NSURLConnection alloc] initWithRequest:req delegate:self];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [data setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)someData {
    [data appendData:someData];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    [connection release];

	// i det här läget har du massa schysst data i ivar:en 'data'
}

@end

Det visade sig att jag inte kunde anropa webservicen med ett enkelt http-anrop enligt VB-koden jag postade, om anropet sker från en annan maskin. Formaterat som ett SOAP-meddelande funkar det bättre.

sRequest = "<?xml version=""1.0"" encoding=""utf-8""?><soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">  <soap12:Body><HelloWorld xmlns=""http://eternit.servepics.com/tosservices"" /></soap12:Body></soap12:Envelope>"
oRequest.ContentType = "application/soap+xml; charset=utf-8"

HannesP:

Yep! Med lite modifieringar funkar det. Behöver tex lägga in post-data med villkoren till metoden som anropas. Följande kod måste in:

NSURL *url = [NSURL URLWithString:@"http://192.168.1.103/tosservices/Service.asmx"];
	
	NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60.0];
	NSString *post = @"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">  <soap12:Body><GetSomeNumbers xmlns=\"http://eternit.servepics.com/tosservices\"><YourName>string</YourName></GetSomeNumbers></soap12:Body></soap12:Envelope>";
	NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
	NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
	[req setHTTPMethod:@POST];
	[req setHTTPBody:postData];
	[req setValue:postLength forHTTPHeaderField:@Content-Length];
	[req setValue:@"application/soap+xml; charset=utf-8" forHTTPHeaderField:@Content-Type];
	
	con = [[NSURLConnection alloc] initWithRequest:req delegate:self];

Kodexemplet ovan visade ett generellt anrop mot en webbsida, inte specifikt en web service. Som du ser var jag tvungen att ändra ganska rejält för att få det att fungera.

Finns ett (1) exempelprojekt på developer.apple.com med web service-anrop så vitt jag kan se. Exemplet är odokumenterat och saknar i princip kommentarer i koden. Det är vad jag kallar lite. I övrigt finns det en artikel om web services. Väldigt kortfattat beskriver den hur det funkar i Cocoa.

Ganska dåligt med tanke på att web services är de facto industristandard för kommunikation mellan serverapplikationer (och klienter) idag.

  • Medlem
  • Stockholm
  • 2007-01-21 21:41
Ursprungligen av eternit:

Kodexemplet ovan visade ett generellt anrop mot en webbsida, inte specifikt en web service. Som du ser var jag tvungen att ändra ganska rejält för att få det att fungera.

Det är så det fungerar här i världen. Om det är en produkt som du tänker att ta betalt för, så kan du väl bli Select-medlem i ADC och få den hjälp du behöver direkt från Cupertino. eller får det inte kosta nått för dig?

  • Medlem
  • Mölndal
  • 2007-01-21 00:20

Håller med. Mac är en bra dator, Microsoft är onda osv fine, men det är svårt att komma ifrån att stödet och dokumentationen för det som diskuterats i den här tråden är riktigt dåligt från Apples sida. Förstår inte varför man ska hålla på att låtsas som nåt annat bara för att det kommer från Apple.

  • Medlem
  • Mölndal
  • 2007-01-22 08:55

"Betala och du skall vara min vän."

  • Medlem
  • Göteborg
  • 2007-04-04 21:22

Kan du inte skriva datakopplingen i Java och utnyttja Microsofts JDBC? Resten av din klient kan du ju skriva i Obj-C om du vill.

Bevaka tråden