Gå til innhold

WEB service som kaster requesten


Anbefalte innlegg

FOlkens...  Holder på med min fantastiske WEB service, men sliter litt.  Det som nå skjer er at det kastes en Exception som sier (desverre på norsk) "en eksisterende tilkobling ble tvangslukket av den eksterne verten"

Men et google søk førte frem til rett melding.  Problemet er jo at denne meldingen er veldig generell, men jeg har kommet frem til følgende:

Når jeg kaller servicen fra klienten så kjører faktisk kallet helt ferdig, og i det kallende kode skal overta så kastes altså exceptionen.  Jeg har en misstanke om at dette har noe med de returnerte dataene å gjøre, for eksempel at noe av det som returneres er typedefinert i servicen, men jeg greier ikek se hva det er for noe.  Jeg har gjort API'et veldig enkelt.  Jeg har laget kontrakt klasser i en DLL i form av et Interface og metodene har allesammen eksakt samme prototype teknikk:

[ServiceContract]
public interface IMinService
{
  [OperationContract]
  OperationResponse Operation(OperationRequest request);
}

Videre er Operationresponse og OperationRequest definert som public CLASS, med henholdsvis [DataContract] og [DataMember], som ser slik ut:

[DataContract]
public class OperationRequest 
{
  [DataMember]
  public string EnVariabel {get; set;}
}

[DataContract]
public class OperationResponse
{
  [DataMember]
  public string EnReturVerdi{get; set;}
}

Nå er nok mine klasser litt mere komplekse en de jeg har vist til her, men prinsipielt går de ut på det samme.  Noen som har noe erfaring med dette som kan hjelpe meg litt ?

Lenke til kommentar
Videoannonse
Annonse

Tror jeg fant ut av det.  En av parameterene i Respons klassen var av typen Exception.  Dette for å kunne returnere en generel exception til klienten ved behov. Problemet var at jeg sendte en "NotImplementedException".  Dette trodde jeg ville være greit da den er kjennt på begge sider, men jeg ser jo i etterkant at klient programmet må callbacke for å fullføre og da er jo servicen allerede stengt.  Det løser jo ikke problemet mitt å kommentere vekk denne parameteren, så problemet er der fortsatt, men med en litt annen vinkling. 

 

Måten jeg kaller servicen på er slik:

using (var Client = GetClient())
  var request = New Apirequest();
  var ret = Client.Api(request);
  if (ret.Exception == null)
    // Handle error
  


Mangler krøll parentesene her fordi de ikke funker akkurat nå av en eller annen sær grunn, men feilen dukker opp ved tilordningen av 'ret' og jeg går ut ifra at det er en eller annen form for reflection eller serialization som finner at det er en Exception der som må castes eller noe sånt og da feiler det.  Er det noen mulighet for å unngå problemet?  Kan det være at systemet er i en eller annen form for LAZY mode eller noe slikt som gjør at kun ytterste lag sendes tilbake..?

Endret av HDSoftware
Lenke til kommentar

Jeg tror du må lage din egen ExceptionDTO (Data Transfer Object). Mener at Exception ikke har de påkrevede DataContract og DataMember attributes og da vil du få feil med (Net)DataContractSerializer som jeg tipper er den du bruker.

 

Skudd i blinde her men...

 

Tror absolutt du er inne på noe.  Men jeg har forenklet dette ved å endre hele Exception elementet til en string.  Så i stedet for å kaste en Exception over service kallet så setter jeg bare teksten i stedet og setter et status felt til Failed.  Det enkle er ofte det, om ikke beste, så i hvertfall raskeste vei til mål :-)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...