0

アプリケーションからサーバーに情報、具体的にはテキスト形式のaとbを渡す必要があります。WCFサービスのコードは次のとおりです。

public class iOSService 
{
// To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is WebMessageFormat.Json)
// To create an operation that returns XML,
// add [WebGet(ResponseFormat=WebMessageFo rmat.Xml)],
// and include the following line in the operation body:
// WebOperationContext.Current.Outgoin gResponse.ContentType = "text/xml";
[OperationContract]
public void DoWork()
{
// Add your operation implementation here
return;
}

// Add more operations here and mark them with [OperationContract]


[OperationContract]
public string iOSTest2(string a, string b)
{
string res = "";
try
{
res=(int.Parse(a) + int.Parse(b)).ToString();
}
catch (Exception exp)
{
res = "Not a number";
}
return res;
}


}

aとbを受信した後、サーバーはそれらを追加し、それらの合計を送り返します。

そして、iOSアプリケーションのサーバーにパラメーターを送信するための私のコードは次のとおりです。

- (IBAction)test:(id)sender {

    NSArray *propertyNames = [NSArray arrayWithObjects:@"23", @"342", nil];
    NSArray *propertyValues = [NSArray arrayWithObjects:@"a", @"b",  nil];

    NSDictionary *properties = [NSDictionary dictionaryWithObjects:propertyNames forKeys:propertyValues];

    NSMutableArray  * arr;

    arr=[[NSMutableArray alloc]initWithObjects:properties, nil];
    NSLog(@"%@",arr);

    NSError * error;
    NSData *jsonData2 = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.mathforyou.net/iOSservice.svc/iOSTest2"]];
    NSString *jsonString = [[NSString alloc] initWithData:jsonData2 encoding:NSUTF8StringEncoding];

    [request setValue:@"appliction/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:jsonData2];
    NSLog(@"JSON String: %@",jsonString);
    NSError *errorReturned = nil;
    NSURLResponse *theResponse =[[NSURLResponse alloc]init];
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&errorReturned];
    if (errorReturned) {
        //...handle the error
        NSLog(@"error");
    }
    else {
        NSString *retVal = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

        NSLog(@"%@",retVal);
    }
}

しかし、サーバーは私に次のメッセージに答えます。

"ExceptionDetail":null,"ExceptionType":null,"Message":"The server was unable to process the request due to an internal error.  For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs.","StackTrace":null

Xcodeからのログは次のとおりです。

2013-03-01 17:38:28.657 2231233122[3442:c07] (
        {
        a = 23;
        b = 342;
    }
)
2013-03-01 17:38:28.659 2231233122[3442:c07] JSON String: [
  {
    "a" : "23",
    "b" : "342"
  }
]
2013-03-01 17:38:29.054 2231233122[3442:c07] {"ExceptionDetail":null,"ExceptionType":null,"Message":"The server was unable to process the request due to an internal error.  For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs.","StackTrace":null}

PS私は友人に助けを求めましたが、彼はObjective-cがC ++専用のプログラムを作成し、コードが機能することを知らないため、サーバーに問題はありません。コードは次のとおりです。

string data = "{\"a\":\"560\",\"b\":\"90\"}";

byte[] bd = Encoding.UTF8.GetBytes(data);

HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create("http://www.mathforyou.net/IOSService.svc/iOSTest2");
wr.ContentType = "application/json";
wr.Method = "POST";
wr.ContentLength = bd.Length;
Stream sw = wr.GetRequestStream();
sw.Write(bd, 0, bd.Length);
sw.Close();
HttpWebResponse resp = (HttpWebResponse)wr.GetResponse();
Stream s = resp.GetResponseStream();
byte[] bres = new byte[resp.ContentLength];
s.Read(bres, 0, bres.Length);
string ans = Encoding.UTF8.GetString(bres);
Console.WriteLine(ans);

助けてください、私は疲れています。

4

2 に答える 2

2

コードをコピーして貼り付けた場合、Content-Type値のスペルを間違えた可能性があります。それはあるべきですapplication/json、あなたはそれをとして持っていappliction/jsonます。

また、これが重要かどうかはわかりませんが、コンテンツの長さを明示的に設定していません。あなたのためにそれをするかどうかはわかりsetHTTPBody:ません。

于 2013-03-01T18:25:29.000 に答える
0

まだこれが必要かどうかはわかりませんが、次のことを試してください。

[request addValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setValue:jsonString forHTTPHeaderField:@"json"]; //<-- I added this line
[request setHTTPMethod:@"POST"];
[request setHTTPBody:jsonData2];
于 2013-05-14T08:08:25.430 に答える