在我的应用中,我使用的是签署文档的网络服务。我必须在SOAP调用中的base64format中发送documento。问题是当我尝试发送像11mb这样的大文档时,base64(存储在NSString中)很大,SOAP消息被截断。
因此我可以发送SOAP调用,并且我发现服务器错误。
是否有任何类可以存储大(非常大)的字符串?
编辑:这是我用过的代码:
将文档转换为base64:
NSData *signData = [[NSFileManager defaultManager] contentsAtPath:self.pathDocument];
NSString *base64file = [signData base64EncodedString];
执行通话:
NSString *soapMsg = [NSString stringWithFormat:@"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\" xmlns:seal=\"http://schemas.datacontract.org/2004/07\">"
"<soapenv:Header/>"
"<soapenv:Body>"
"<tem:Sign>"
"<tem:type>Signature</tem:type>"
"<tem:biometricState>%@</tem:biometricState>"
"<tem:idCertificate>%d</tem:idCertificate>"
"<tem:signatureProfile>%@</tem:signatureProfile>"
"<tem:signatureType>Default</tem:signatureType>"
"<tem:hashAlgorithm>Default</tem:hashAlgorithm>"
"<tem:options>%@</tem:options>"
"<tem:signingDocument>%@</tem:signingDocument>"
"</tem:Sign>"
"</soapenv:Body>"
"</soapenv:Envelope>",
aSign,
[aCertificado idCert],
tipoFirma,
flagFirma,
aDocument
];
NSString *stringURL = [NSString stringWithFormat:@"http://%@//Service/SignatureServiceBasic.svc", [settings servidor]];
NSURL *sRequestURL = [NSURL URLWithString:stringURL];
NSMutableURLRequest *myRequest = [NSMutableURLRequest requestWithURL:sRequestURL];
NSString *sMessageLength = [NSString stringWithFormat:@"%d", [soapMsg length]];
[myRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[myRequest addValue:@"http://tempuri.org/ISignatureServiceBasic/Sign" forHTTPHeaderField:@"SOAPAction"];
[myRequest addValue: sMessageLength forHTTPHeaderField:@"Content-Length"];
[myRequest setHTTPMethod:@"POST"];
[myRequest addValue:@"Jakarta Commons-HttpClient/3.1" forHTTPHeaderField:@"User-Agent"];
[myRequest setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]];
NSString* username = [settings usuario];
NSString* password = [settings pass];
NSString *authStr = [NSString stringWithFormat:@"%@:%@", username, password];
NSData *authData = [authStr dataUsingEncoding:NSASCIIStringEncoding];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64EncodingWithLineLength:80]];
[myRequest setValue:authValue forHTTPHeaderField:@"Authorization"];
signConnection = [[NSURLConnection alloc] initWithRequest:myRequest delegate:self];
if( signConnection ) {
webResponseData = [NSMutableData data];
}else {
NSLog(@"Some error occurred in Connection");
}
aDocument
是base64中的文档。
提前致谢!
答案 0 :(得分:1)
不,没有这样的课......但你可以尝试一件事 尝试以块的形式创建数据而不是大文件,并使用流将数据发送到服务器..
答案 1 :(得分:0)
您应该以附件的形式发送这么大的资源,而不是作为请求的主体。 AFNetworking库为它提供了准备使用的功能。
答案 2 :(得分:0)
我已经解决了这个问题。 对不起,我误解了这个问题。我的所有代码都没问题,问题是由于服务参数(在IIS中)控制了可以上传的文件的最大大小。
因为应用程序处于调试模式,Xcode在内存中崩溃并失败。不使用调试器,它不会。
感谢所有人!