2016-12-21 4 views
1

이 내 프로그램 (클라이언트) 측과 거래 수익을 얻기 위해 시도 할 수있는 기능입니다 것은 다음과 같습니다WCF 서비스 - 클래스를 반환하려고

: 클라이언트

private void MakeTransition_Click(object sender, RoutedEventArgs e) { 
     //string CardHoldName = _CardHoldName.Text; 
     //string CardBrand = _CardBrand.Text; 
     //string Password = _Password.Text; 
     int CardNumber = int.Parse(_CardNumber.Text); 
     //int ExpirationDateM = int.Parse(_ExpirationDateM.Text); 
     //int ExperiationDateY = int.Parse(_ExpirationDate_Y.Text); 
     int TransationValue = int.Parse(_TransitionValue.Text); 

     Transition t = new Transition(); 

     t.CardNumber = CardNumber; 
     t.TransitionValue = TransationValue; 

     HttpClient client = new HttpClient(); 
     string serializedContent = JsonConvert.SerializeObject(t); 
     StringContent content = new StringContent(serializedContent); 

     /*Transaction teste = JsonConvert.DeserializeObject<Transaction>(content.ReadAsStringAsync().Result); 
     MessageBox.Show(teste.TransitionValue + ""); 
     MessageBox.Show(content.ReadAsStringAsync().Result);*/ 

     HttpResponseMessage response = client.PostAsync("http://localhost:8733/Design_Time_Addresses/HireMePleasee_Server/Service1/mex", content).Result; 

     MessageBox.Show(response.Content.ReadAsStringAsync().Result); 

     TransactionResponse r = JsonConvert.DeserializeObject<TransactionResponse>(response.Content.ReadAsStringAsync().Result); 

     if (r.Status == "Approved") { 
      MessageBox.Show("APPROVED!!!"); 
     } else { 
      MessageBox.Show("YOU GET NOTHING! GOOD DAY, SIR!"); 
     } 
    } 
} 

내 트랜잭션 클래스 클라이언트에서

[DataContract] 
public class Transaction{ 
    [DataMember] 
    public int CardNumber { get ; set; } 
    [DataMember] 
    public int TransitionValue { get; set; } 
} 

내 TransactionResponse 클래스 :

[DataContract] 
public class TransactionResponse { 
    [DataMember] 
    public string Status { get; set; } 
} 

@@@@@@@@@@@

public class Service1 : IService1 { 

    public Transaction checkTransaction(Transaction t) { 
     if (t.TransactionValue > 1500) { 
      t.Status = "Denied"; 
     } else { 
      t.Status = "Approved"; 
     } 

     return t; 
    } 
} 

그리고의 ServiceContract :

이 내 구현 된 기능을 가진 서비스입니다

[ServiceContract] 
public interface IService1 { 
    [OperationContract] 
    Transaction checkTransaction(Transaction t); 
} 

[DataContract] 
public class Transaction { 
    [DataMember] 
    public int CardNumber { get; set; } 
    [DataMember] 
    public int ValidationDate { get; set; } 
    [DataMember] 
    public int TransactionValue { get; set; } 
    [DataMember] 
    public string Status { get; set; } 
} 
#

어떻게 든 "MessageBox.Show (. response.Content.ReadAsStringAsync() 결과) " 내 서버 측이 클라이언트로부터 제공된 데이터를 처리하지 않고 전혀 반환하지 않는다는 것을 의미하는 아무것도 인쇄하지 않습니다. 나는 정말로 도움이되는 것을 찾을 수 없기 때문에 나는 여기에 커뮤니티를 요구하고 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까??? :

+0

'mex' 엔드 포인트는 잠재적 인 클라이언트에게 서비스의 구조를 알려주는 메타 데이터입니다. _ _ 실제 엔드 포인트를 사용하여 실제로 서비스를 호출해야합니다. – stuartd

+0

내 WCF 기술은 이미 녹슬었지만 '/ mex' (메타 데이터 교환) 엔드 포인트에 게시하는 중입니다. 호출이 실제로 실행되는지 확인하기 위해 서버 측 메소드에 중단 점을 설정 했습니까? –

+0

@BernhardKoenig 아니, 아니에요. 끝점에 대한 몇 가지 변경을 시도해 보겠습니다. –

답변

0

먼저 HttpClient() 클래스가 직접 WCF SOAP 서비스를 호출 할 수 없습니다. HttpClient()는 URL에서 일부 데이터가 직접 노출되는 곳에서 사용되기 때문에 HttpClient를 직접 호출 할 수 없습니다. WCF 서비스를 Restful 서비스로 제공하십시오 (WCF의 편안한 서비스가 무엇인지 확인하십시오).

그러나 Proxy 클래스를 사용하여 WCF Soap 서비스를 호출하지 않으려는 경우 HttpClient의 한 가지 대안은 ChannelFactory 클래스를 사용하는 것입니다. 이 클래스는 HttpClient와는 다르지만 WCF 서비스의 클래스에 대한 프록시를 만들지 않고 서비스를 사용하도록 만들어졌습니다.

자세한 방법을 알고 싶다면이 링크를 확인하십시오 편안한 서비스와 HttpClient로 전화하십시오. http://sylvester-lee.blogspot.in/2013/04/wcf-rest-service-httpclient-vs-wcf.html

+0

헤이 친구, 대답 주셔서 감사합니다, 그것은 직접적인 해결책을주지 않았지만, 나는 당신에게서 올바른 길을 가졌습니다. –