简体   繁体   English

通过目标C调用时未找到Web服务方法

[英]Web service method not hit when called via Objective C

My App_Code/IGetEmployees.vb file 我的App_Code / IGetEmployees.vb文件

<ServiceContract()> _
Public Interface IGetEmployees
 <OperationContract()> _
<WebInvoke(Method:="POST", ResponseFormat:=WebMessageFormat.Json, BodyStyle:=WebMessageBodyStyle.Wrapped, UriTemplate:="json/contactoptions")> _
Function GetAllContactsMethod(strCustomerID As String) As List(Of NContactNames)
End Interface

My App_Code/GetEmployees.vb file 我的App_Code / GetEmployees.vb文件

   <WebMethod()> _
 <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
Public Function GetAllContactsMethod(strCustomerID As String) As List(Of NContactNames) Implements IGetEmployees.GetAllContactsMethod
    Utilities.log("Hit get all contacts at 56")
    Dim intCustomerID As Integer = Convert.ToInt32(strCustomerID)
    Dim lstContactNames As New List(Of NContactNames)
 'I add some contacts to the list.
Utilities.log("returning the lst count of " & lstContactNames.Count)
    Return lstContactNames
End Function

NContactNames is a class with 3 properties. NContactNames是具有3个属性的类。 So i am using ASP.NET web services to retrieve information from SQL server and pass it to my iPad in JSON format. 因此,我正在使用ASP.NET Web服务从SQL Server检索信息,并将其以JSON格式传递给我的iPad。 I have a problem with parameter passing. 我有一个参数传递问题。 So like you see i have 2 files IGetEmployees.vb and GetEmployees.vb. 因此,就像您看到的那样,我有2个文件IGetEmployees.vb和GetEmployees.vb。 I am implementing the method GetAllContactsMethod. 我正在实现方法GetAllContactsMethod。 What's happening is the two lines in GetEmployees.vb file (Utilities.log), they never get logged. 发生的是GetEmployees.vb文件(Utilities.log)中的两行,但从未记录。 The function is not getting called at all. 该函数根本没有被调用。

My objective c code to call this function 我的目标C代码调用此函数

    NSString *param = [NSString stringWithFormat:@"strCustomerID=%@",strCustomerID];
    jUrlString = [NSString stringWithFormat:@"%@",@"http://xyz-dev.com/GetEmployees.svc/json/contactoptions"];
    jurl = [NSURL URLWithString:jUrlString];
    NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:jurl];

    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:[param dataUsingEncoding:NSUTF8StringEncoding]];
    NSLog(@" request string is %@",[[request URL] absoluteString]);
    NSLog(@"Done");

    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
    if(theConnection)
    {
        jData = [NSMutableData data];
        NSError *jError;
        NSMutableDictionary *json =[NSJSONSerialization JSONObjectWithData:jData options:kNilOptions error:&jError];
        NSLog(@"%@",json); //Gets Here and prints (null)
        NSLog(@"Done"); //prints this as well.

    }
    else
    {
        NSLog(@"No");
    }

At the time of posting this code the "if" statement is true and (null) is printed followed by "Done" The output of my absolute request is: request string is http://xyz-dev.com/GetEmployees.svc/json/contactoptions This is the first time i am writing json to accept parameters. 在发布此代码时,“ if”语句为true,并且输出(null),然后打印“ Done”。我的绝对请求的输出为:请求字符串为http://xyz-dev.com/GetEmployees.svc/ json / contactoptions这是我第一次编写json以接受参数。 So i might be missing something.What is it?Why is the function not getting called at all on the Visual Studio side. 所以我可能会缺少一些东西,这是什么?为什么在Visual Studio端根本没有调用该函数。 If you need more info please ask.Thanks... 如果您需要更多信息,请询问。谢谢...

this is the moethod in Objetive-C, for that. 为此,这是Objetive-C的方法。

-(void) insertEmployeeMethod

{

    if(firstname.text.length && lastname.text.length && salary.text.length)

    {

        NSString *str = [BaseWcfUrl stringByAppendingFormat:@"InsertEmployee/%@/%@/%@",firstname.text,lastname.text,salary.text];

        NSURL *WcfSeviceURL = [NSURL URLWithString:str];
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

        [request setURL:WcfSeviceURL];

        [request setHTTPMethod:@"POST"];

        // connect to the web

        NSData *respData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

        // NSString *respStr = [[NSString alloc] initWithData:respData encoding:NSUTF8StringEncoding];


        NSError *error;

        NSDictionary* json = [NSJSONSerialization 

                              JSONObjectWithData:respData 

                              options:NSJSONReadingMutableContainers 

                              error:&error];  



        NSNumber *isSuccessNumber = (NSNumber*)[json objectForKey:@"InsertEmployeeMethodResult"];


        //create some label field to display status
        status.text = (isSuccessNumber && [isSuccessNumber boolValue] == YES) ? [NSString stringWithFormat:@"Inserted %@, %@",firstname.text,lastname.text]:[NSString stringWithFormat:@"Failed to insert %@, %@",firstname.text,lastname.text];
    }
}

Before to run the code, test your URL with POSTMAN, is an app from Google Chrome. 在运行代码之前,请使用POSTMAN测试您的URL,POSTMAN是Google Chrome的应用程序。 regards. 问候。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM