gpt4 book ai didi

ios - 到 WCF JSON REST 服务器的 NSURLConnection 超时

转载 作者:行者123 更新时间:2023-12-01 16:51:33 25 4
gpt4 key购买 nike

我有一个使用 Microsoft-HTTPAPI 构建的基于 Windows 的 REST 服务器(即它不在 IIS 下运行)

如果我从基于浏览器的 REST 工具 (Firefox RESTClient) 向服务发送 JSON 请求,则服务器接收请求并根据来自 Microsoft 服务跟踪查看器的跟踪和来自服务的响应正确处理它。我从服务收到有效的 JSON。

我有一个 iOS 应用程序,它使用 NSURLConnect 向服务发送非常相同的 JSON 请求,但它总是超时。我使用 WireShark 进行了跟踪,在这两种情况下,HTTP 请求都正确形成并正确发送到服务器。我使用 MS Trace Viewer 进行了跟踪,它进入“接收字节”但永远不会返回。当我最终关闭 WCF 服务器时出现异常。当我关闭 iOS 应用程序时它永远不会返回。

我尝试使用 NSURLConnection sendSynchronousRequest 并异步使用回调和异步使用完成 block 。如果我将超时设置为 0,则调用(对 sendSynchronousRequest)将永远不会返回。在所有其他情况下,我会超时,并且 WCF 永远不会完成 WCF 调用的接收字节部分(POST 请求)

我已经检查过了

这是我的 iOS 代码:

dispatch_queue_t myQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(myQ, ^{ // First Queue the parsing
@try {
//Generate endpoint url
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@",appState.posPostingURL,serviceName]];
//Setup request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:10.0];

NSString *authStr = [NSString stringWithFormat:@"%@:%@", @"xxxx", @"xxxx"];
NSString *authData = [NSString base64StringFromString:authStr];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", authData];
[request setValue:authValue forHTTPHeaderField:@"Authorization"];

//Setup request headers
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"no-cache" forHTTPHeaderField:@"Cache-Control"];
[request setValue:[NSString stringWithFormat:@"%d", [dataBuffer length]] forHTTPHeaderField:@"Content-Length"];

// Put the request data in the request body
[request setHTTPBody: dataBuffer];
NSHTTPURLResponse *urlResponse = nil;
NSError *error = nil;
// and send to the server synchronously
serverData = [[NSURLConnection sendSynchronousRequest:request
returningResponse:&urlResponse
error:&error] mutableCopy];
// Now check the status and response
if (error) {

我的 WCF 代码如下
namespace MyWebService{
[ServiceContract(Name = "MyServiceIntegrator", Namespace = "")]
public interface IMyIntegrator
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/Configure",
BodyStyle=WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
Result Configure(MyServerConfig config);

在 app.config 文件中,服务端点配置为
binding="webHttpBinding"

Trace View 如下:
WCF Trace

即使 JSON 有效,服务器也没有完成读取是否有任何原因。

我也查了 NSURLConnection JSON Submit to Server
据我所知,我发送请求的代码是正确的。

任何想法 - 拉我的头发已经 3 天了

最佳答案

如果你改变这个会发生什么:

  [request setValue:[NSString stringWithFormat:@"%d", [dataBuffer length]] forHTTPHeaderField:@"Content-Length"];

对此:
  [request setValue:[NSString stringWithFormat:@"%i", [dataBuffer length]] forHTTPHeaderField:@"Content-Length"];

可能不会有什么不同,但你的代码的其余部分看起来不错,所以也许值得一试。 (我的想法是小数导致服务器问题)。

关于ios - 到 WCF JSON REST 服务器的 NSURLConnection 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15321069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com