2016-12-14 2 views
0

Neu bei WCF Services und benötigt Hilfe.Fehler beim Abrufen von Objekten vom WCF-Dienst

So habe ich einen Klienten (Grundkonsolenanwendung), um die WS zu testen (die auf einem Testserver gehostet wird localhost nicht)

Mit ihm kann ich Standardobjekte wie String übergeben und Abrufen und hin und her int.

Ich kann auch benutzerdefinierte Klassen an den WS passieren, aber sie nicht abrufen. Ich erhalte entweder Timeout oder

An error occurred while receiving the http response to... this could be due 
to the service endpoint binding not using the http protocol. this could also be due to an 
http request context being aborted by the server (possibly due the 
the service shutting down) 

The underlying connection was closed. An unexpected error occurred on receive. 

Unable to read data from the transport connection, an existing connection 
was forcibly closed by the remote host. 

ich über Endpunkte gesucht und jeder einzelne schien anders und nicht offensichtlich anpassungsfähig Ich bin derzeit mit den Aktien web.config, wenn das Projekt erstellt wurde, unter dem ich glaube, ist, wo mein Problem ist aber schwierig zu wissen, was zu tun ist.

WS Web.config

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <appSettings /> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <httpRuntime /> 
    </system.web> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <directoryBrowse enabled="true" /> 
    </system.webServer> 
    <connectionStrings> 
    <add name="CNS" connectionString="xyz" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 

</configuration> 

Service-Methode in Frage

public Request GetOrderByRef(string Ref) 
{ 
    AssetStockEntity db = new AssetStockEntity(); 
    try 
    { 
     RequestEntity _requestef = new RequestEntity(); 
      _requestef = db.RequestEntities.FirstOrDefault(x => x.Incident == Ref); 

     if (_requestef == null) 
      return null; 
     else 
      return TranslateRequestEntityToRequest(_requestef); 
    } 
    catch (Exception ex) 
    { 
     string debug = ex.ToString(); 
    } 
} 

EDIT

Database Connection Test (wie erwartet funktioniert)

public string GetOrderByRefTest(string Ref) 
     { 
      AssetStockEntity db = new AssetStockEntity(); 
      try 
      { 
       RequestEntity _requestef = new RequestEntity(); 
       _requestef = db.RequestEntities.FirstOrDefault(x => x.Incident == Ref); 

       if (_requestef == null) 
        return null; 
       else 
        return _requestef.Requested_By; 
      } 
      catch (Exception ex) 
      { 
       string debug = ex.ToString(); 

       return debug; 
      } 
     } 

Ich benutze den Umsetzungsaufruf, um EF-Objekte zu konvertieren, um die Belichtung zu verhindern, da das, was ich verstehen kann, schlecht ist.

Klasse

[DataContract] 
public class Request 
{ 
    [DataMember] 
    public int RId { get; set; } 
    [DataMember] 
    public string Incident { get; set; } 
    [DataMember] 
    public string Requested_By { get; set; } 
    [DataMember] 
    public string Authorised_By { get; set; } 
    [DataMember] 
    public virtual ICollection<Request_Items> Request_Items { get; set; } 
} 

Schnittstelle

[ServiceContract] 
public interface Iws 
{ 
    [OperationContract] 
    Request GetOrderByRef(string Ref); 
} 

Test-Konsole

static void Main(string[] args) 
     { 

      ASM.IwsClient ws = new ASM.IwsClient(); 

      try 
      { 
       Console.WriteLine(ws.GetOrderByRef("ABC123").Requested_By); 
       Thread.Sleep(5000); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex); 
       Thread.Sleep(500000); 
      } 


     } 

** gelöst.

Dieses Problem war ein Parameter, den ich der Kürze halber ausgelassen habe, war eigentlich die Ursache, wurde nicht serialisiert und daher zurückgewiesen.

Antwort

0

Die Ursache war ein anderer Parameter "Request_Items", der in seiner Klasse nicht mit DataContract serialisiert wurde.

+0

Dieser Link Fehlersuche aktiviert, die mich, den tatsächlichen Fehler aufzuspüren geholfen. http://www.codewrecks.com/blog/index.php/2012/04/23/troubleshoot-wcf-exception/ –

Verwandte Themen