Q:

connecting to WCF from iOS

Ugh.  I have read a few similar questions here on SOF but so far none of those solutions have worked for me.
I am trying to connect an iOS7 client to a WCF web service.  Let me go ahead and point out that I didn't write the WCF service and have never written one - so I'm pretty WCF stupid.  As I understand it - the idea is basically create a SOAP xml packet, and send it over, and wait for an xml response.  There is a test client running on .NET that works fine, so I had the guy who wrote that turn on Fiddler so I could see what the xml and request headers should look like.  Mine now are identical to his, yet the only response I can muster from the server is:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">a:ActionNotSupported</faultcode><faultstring xml:lang="en-US">The message with Action 'http://www.tempuri.org/IFoolSpoon_SoWo_Service/Check_Item_test' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver.  Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).</faultstring></s:Fault></s:Body></s:Envelope>

Since that is scrolling WAY off the screen - it's a ContractMismatch error - whatever that actually means.
Side challenge:  in googling the above error message - it seems impossible for anyone to explain the term "Contract" without using the word "contract".  ;)  Every explanation I saw was basically "it's like...the contract - you know...like the contract between the client and server...it's like a contract."  :(
Anyway, here is the relevant obj-c code, with names/urls changed to protect the guilty:
// construct a URL that will ask the service for what we want
NSURL *url = [NSURL URLWithString:@"http://mymachine.myisp.com/SOWO/MyService.svc"];

// build the SOAP envelope
NSString *soapMessage = [NSString stringWithFormat:
                         @"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
                         "<s:Body >\n"
                         "<Check_Item_test xmlns=\"http://derp.org/\">\n"
                         "<UPC>1090000021</UPC>\n"
                         "</Check_Item_test>\n"
                         "</s:Body>\n"
                         "</s:Envelope>\n"];

soapMessage = [soapMessage stringByReplacingOccurrencesOfString:@"\n" withString:@"\r\n"];

// put URL into a NSURLRequest
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];

NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];
NSLog(@"length = %@", msgLength);
[req addValue: @"text/xml" forHTTPHeaderField:@"Content-type"];
[req addValue: @"http://www.tempuri.org/IServiceInterface/Check_Item_test"
        forHTTPHeaderField:@"SOAPAction"];
[req addValue: msgLength forHTTPHeaderField:@"Content-Length"];
[req addValue:@"100-continue" forHTTPHeaderField:@"Expect"];
[req setHTTPMethod:@"POST"];
[req setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];

Some notes about the above code.  There is another developer calling the same service from Ruby and he mentioned a couple of things:  changing the line endings to \r\n from \n was his suggestion, since he found out that was a problem for him.  I also adjusted some header capitalizations:  SOAPaction to SOAPAction, etc.  So now I'm matching HIS xml/headers exactly too, but no luck.
My request looks like this (from an OSX Fiddler equivalent):
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body >
<Check_Item_test xmlns="http://derp.org/">
<UPC>1090000021</UPC>
</Check_Item_test>
</s:Body>
</s:Envelope>

That seems to match every other client and all of them work save mine.  So yeah - help?  I am one degree away from the web.config for the service and I have access to the .svclog on the server.  Interestingly enough - my requests aren't getting logged, even tho logMalformedRequests is set to true.  Suggestions on where else to check for whatever bitbucket my requests are going into are appreciated.
So yeah - annoyed, frustrated, tired.  For something that should be so simple, this has turned out to be a gigantic pain.  It's probably something stupid, so perhaps I just need more eyes on it than my own.
TIA.

A:

So the answer turned out to be:  stop using SOAP.
I ended up rewriting the service endpoints as REST endpoints and all is fine and dandy.

