我无法使用 WCF 从 iOS 应用程序接收帖子数据。使用服务时,我的 DataContract 对象为空。我已经尝试过包装和裸露的请求。不允许包装请求返回方法,裸请求接收对象但所有属性均为空。
运营合同:
[OperationContract]
[WebInvoke(Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "SaveReceipt/{userId}/{sessionId}/{tuttiTOKEN}/{receipt}")]
String SaveReceipt(String userId, String sessionId, String tuttiTOKEN, String receipt);
配置:
<system.serviceModel>
<services>
<service name="TuttiPlayer.Webservices.TuttiServices" behaviorConfiguration="TuttiServiceBehavior">
<endpoint address="" binding="webHttpBinding" contract="TuttiPlayer.Webservices.ITuttiServices" behaviorConfiguration="web"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
<behavior name="TuttiServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
数据合约:
[DataContract(Name="receipt")]
public class Receipt
{
[DataMember]
public String signature { get; set; }
[DataMember(Name="purchase-info")]
public String purchaseinfo {get;set;}
[DataMember]
public String environment {get;set;}
[DataMember]
public String Sandbox { get; set; }
[DataMember]
public String pod { get; set; }
[DataMember(Name="signing-status")]
public String singingstatus { get; set; }
}
IOS代码:
- (void) saveReceipt:(int)uid :(int)sid :(NSData *)receiptData {
NSString *receiptString = [[NSString alloc] initWithData:receiptData encoding:NSUTF8StringEncoding];
SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init];
NSMutableDictionary *jsonDic = [NSMutableDictionary dictionary];
[jsonDic setObject:receiptString forKey:@"receipt"];
NSString *jsonString = [jsonWriter stringWithObject:jsonDic];
NSData *jsonData = [NSData dataWithBytes:[jsonString UTF8String] length:[jsonString length]];
NSString *serviceURL = [baseServiceURL stringByAppendingString:@"SaveReceipt"];
NSString *serviceURLAndParam = [NSString stringWithFormat:@"%@/%d/%d/%@",serviceURL, uid, sid, self.sessionToken];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:serviceURLAndParam] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-type"];
[request setValue:[NSString stringWithFormat:@"%d",[jsonData length]] forHTTPHeaderField:@"Content-length"];
[request setHTTPBody:jsonData];
NSURLConnection *theConnection = [NSURLConnection connectionWithRequest:request delegate:self];
NSMutableDictionary *singleConnectionDic = [NSMutableDictionary dictionary];
[connectionDic setObject:singleConnectionDic forKey:@"SaveReceipt"];
[singleConnectionDic setObject:theConnection forKey:@"Connection"];
[singleConnectionDic setObject:[NSNumber numberWithInt:0] forKey:@"FailCount"];
[singleConnectionDic setObject:serviceURLAndParam forKey:@"URL"];
NSMutableData *theData = [NSMutableData data];
[singleConnectionDic setObject:theData forKey:@"Data"];
[jsonWriter release];
[receiptString release];
}