1

我无法使用 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];
     }
4

0 回答 0