2012-03-05 6 views
0

안녕하세요.이 코드를 사용하여 안녕하세요. 형식 문자열을 int로 변환 할 수 없습니다. webmethod : 함축적 인 형식 문자열을 int로 변환 할 수 없습니다.

 CalculateSumOfList.ServiceReference1.Service1SoapClient client = new CalculateSumOfList.ServiceReference1.Service1SoapClient(); 
     CalculateSumOfList.ServiceReference1.ArrayOfInt arrayOfInt = new CalculateSumOfList.ServiceReference1.ArrayOfInt(); 
     arrayOfInt.AddRange(listInt); 
     int result = client.CalculateSum(arrayOfInt); //error here! 
     label1.Text = Convert.ToString(result); 

내가 전화 오전의 WebMethod

은 여기에 있습니다 :

namespace CalculateWebServiceSum 
{ 
    /// <summary> 
    /// Summary description for Service1 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService] 
    public class Service1 : System.Web.Services.WebService 
    { 

     [WebMethod] 
     public string CalculateSum(List<int> listInt) 
     { 
      int[] sum = listInt.ToArray(); 

      return sum.ToString(); 

     } 
    } 
} 
+0

왜 계속 같은 질문을합니까? 1 시간 전에 물어 본 질문에 잘못된 것이 있습니까? –

+0

미안하지만 다른 질문은 string의 int의 초기 문제점과 관련이 있습니다. 이것은 웹 서비스의 sum 함수를 호출하는 것과 관련이 있습니다. –

+0

하지만 정확히 똑같은 문제입니다! –

답변

5

오류 메시지는 매우 분명하다. 귀하의 방법, CalculateSum() 문자열을 반환합니다.

int result = client.CalculateSum(arrayOfInt); 
^ type int ^returns string 

옵션 1

나는 당신의 CalculateSum()이로 변경 제안 :

오류가 발생한 라인에, 당신은 int 형의 값을 설정하는 문자열 결과를 사용하려고 시도하는 것
public int CalculateSum(List<int> listInt) 
{ 
    return listInt.Sum(); 
} 

참고 : 웹 서비스에 List<int>을 합산 한 이유가 확실하지 않습니다. List<int> 인 경우 List<int>.Sum()으로 전화하면됩니다. WS가 필요하지 않습니다. 당신이 그것을 검색 후 INT에 .ToString()를 호출하고 있기 때문에

옵션 2

, 왜 그냥 문자열로 검색?

string result = client.CalculateSum(arrayOfInt); 

public string CalculateSum(List<int> listInt) 
{ 
    return listInt.Sum().ToString(); 
} 
+0

어떻게 해결할 수 있습니까? 모든 메신저하려고하는 목록의 합계를 계산하지만 webservice에서 전화? –

+0

왜 웹 서비스가 클라이언트 측에서 할 수있는 일을 사소하게하고 싶습니까? 그것은 문자열을 대문자로 만들도록 웹 서비스를 호출하는 것과 같습니다. –

+0

@ Øyvind Knobloch-Bråthen, WS가 사소한 일을하기를 원하지 않습니다. OP가합니다. ** 옵션 1 **에서 내 메모를보십시오. 나는 OP와 똑같은 말을했다. –

2

CalculateSum 문자열을

public string CalculateSum(List<int> listInt) 

를 반환하면 정수 변수에 할당된다.

int result = ... 

정수를 반환하려면 CalculateSum으로 변경합니다.

1

변경

int result = client.CalculateSum(arrayOfInt); //error here! 

string result = client.CalculateSum(arrayOfInt); // no errors here! 

으로하지만 합이 다수이기 때문에, int를 반환하는 당신의 방법의 서명을 변경하는 것이 좋습니다.

[WebMethod] 
public int CalculateSum(List<int> listInt) 
{ 
    return listInt.Sum();  
} 
+0

그는 웹 서비스 소스 코드를 가지고 있으므로, 웹 서비스 소스 코드를 변경할 수 있다고 가정 해 보자.이 경우 웹 서비스를 변경하는 것이 가장 좋다. – Polyfun

+0

@ShellShock 예. 알아 냈습니다. 이미 답변을 업데이트했습니다. – oleksii

+0

이 경우'result'는 System.Int32 []'입니다. OP에 유용하지 않음 (오류없이 컴파일 된 경우에도) –

2

여기에는 많은 문제가 있습니다. 먼저, CalculateSum 메서드는 문자열을 반환하지만이를 int에 저장하려고합니다.

int result = client.CalculateSum(arrayOfInt); 

그래서 먼저 CalculateSum을 변경하여 int를 반환해야합니다. 그 시점에서 CalculateSum이 ..... System.Int32[]을 반환하는 것을 볼 수 있습니다. 또한 intArray의 기본 ToString입니다. 그래서 당신의 논리에도 결함이 있습니다. 그걸 수정합시다.

public int CalculateSum(List<int> listInt) 
{ 
    int sum = listInt.Sum(); 
    return sum.ToString(); 
} 

그런 다음 당신은 아마 당신이 모든 방법을 필요로하지 않는다는 것을 발견 할 것이다, 그것은 이름에서 알 수 무엇을하지 않습니다이

int result = arrayOfInt.Sum(); 
0

CalculateSum 웹 메소드와 같이 다만 수 - 그것은 정수리스트의 합을 반환하지 않고 "System.Int32 []"와 같은 타입 이름을 반환합니다.

[WebMethod] 
    public int CalculateSum(List<int> listInt) 
    { 
     return listInt.Sum(); 
    } 

당신은 발신자를 변경할 필요가 없습니다 : 당신이 정말로 정수의 합을 원하는 가정, 당신은 웹 방식을 변경할 수 있습니다, 나는 다음과 같은 제안한다.

관련 문제