我有一个使用 Microsoft-HTTPAPI 构建的基于 Windows 的 REST 服务器(即它不在 IIS 下运行)
如果我从基于浏览器的 REST 工具 (Firefox RESTClient) 向服务发送 JSON 请求,则服务器接收请求并根据来自 Microsoft 服务跟踪查看器的跟踪和来自服务的响应正确处理它。我从服务收到有效的 JSON。
我有一个 iOS 应用程序,它使用 NSURLConnect 向服务发送非常相同的 JSON 请求,但它总是超时。我使用 WireShark 进行了跟踪,在这两种情况下,HTTP 请求都正确形成并正确发送到服务器。我使用 MS Trace Viewer 进行了跟踪,它进入“接收字节”但永远不会返回。当我最终关闭 WCF 服务器时出现异常。当我关闭 iOS 应用程序时它永远不会返回。
我尝试使用 NSURLConnection sendSynchronousRequest 并异步使用回调和异步使用完成块。如果我将超时设置为 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 视图如下:
即使 JSON 有效,服务器也没有完成读取是否有任何原因。
我还检查了NSURLConnection JSON Submit to Server ,据我所知,我发送请求的代码是正确的。
任何想法 - 拉我的头发已经 3 天了