2 Stimmen

Wie ändere ich meinen WCF-Dienst so, dass er mit ASP.NET-Seiten funktioniert?

Ich habe einen WCF-Dienst (.NET 3.5) erstellt, der Daten aus einer Datenbank abruft und eine Liste von Objekten zurückgibt. Er funktioniert einwandfrei. Ich habe ihn mit der Anwendung WCFTestClient getestet und die gewünschten Ergebnisse erhalten.

Nun habe ich versucht, eine ASP.NET-Webanwendung zu erstellen und den Dienst zu nutzen. Nach der Aktivierung <serviceDebug includeExceptionDetailInFaults="true"/> in der Konfigurationsdatei, lautet die Fehlermeldung "Object reference not set to an instance of an object".

Wie ändere ich den Dienst so, dass er mit ASP.NET funktioniert?

Gracias.

Update 1 - Ich habe einen Verweis auf den Dienst erstellt. Als ich meine sehr einfache Testanwendung auf der Grundlage des auf der Standardwebseite des Dienstes angezeigten Beispielcodes ausführte, erhielt ich die Meldung "Object reference not set to an instance of an object".

Der Dienst gibt die richtigen Ergebnisse zurück, wenn ich das mit Visual Studio bereitgestellte Dienstprogramm WCF Test Client verwende. Wenn ich versuche, den folgenden Code im page_load-Ereignis zu verwenden, erhalte ich die Objektreferenzmeldung.

PhoneNumberServiceClient client = new PhoneNumberServiceClient();

// Use the 'client' variable to call operations on the service
List<PhoneNumber> phones = client.GetPhoneNumbers();  

// Always close the client.
client.Close();

Ich werde versuchen, zusätzliche Informationen zur Fehlersuche zu erhalten.

0voto

BigChrisDiD Punkte 152

Sie müssen den Dienst auch so konfigurieren, dass er Ausnahmedetails in den Ergebnissen zulässt. Folgen Sie den Informationen hier, um das zu erreichen .

Ich vermute, dass Ihre ASP.NET-Anwendung erwartet, bestimmte Informationen vom Dienst abzufangen, die Sie nicht eingerichtet haben, um sie bereitzustellen, daher der Null-Objekt-Fehler.

0voto

GenEric35 Punkte 6642

Ich hätte dies als Kommentar geschrieben, konnte aber nicht herausfinden, wie das geht, also versuche ich es mal mit einer Antwort.

Sie haben erwähnt, dass Sie den eingebauten Test-Client verwendet haben, aber als Sie Ihre Client-Anwendung erstellt haben (die Website, mit der Sie Ihren neuen Dienst aufrufen möchten), haben Sie den Endpunkt (web.config) so konfiguriert, dass er mit dem Ende Ihres wcf-Dienstes übereinstimmt? Zum Beispiel, eine Client-Anwendung, die einen wcf-Dienst mit wsHttpBinding-Endpunkt aufruft:

<configuration>
<system.serviceModel>
    <client>
        <endpoint address="http://localhost:8080/ContractorService" binding="wsHttpBinding" contract="ContractorService.IContractorService"
            name="ContractorService_WsHttp">
        </endpoint>
    </client>
</system.serviceModel>

Außerdem gibt Ihr Dienst eine Liste zurück, die Standard-Service-Referenz die Sie Ihrem Client hinzugefügt haben, endet sehr wahrscheinlich bei array. Klicken Sie mit der rechten Maustaste auf den Dienstverweis, den Ihr Client jetzt hat, und wählen Sie Dienstverweis konfigurieren, und wählen Sie im Dropdown-Feld für den Sammlungstyp anstelle von System.array die Option System.Collections.Generic.List.

Wenn Sie Einzelheiten zur Konfiguration benötigen, lesen Sie hier http://msdn.microsoft.com/en-us/library/dd936243.aspx

Legen Sie einen Haltepunkt in der Page_Load-Methode Ihres Clients, sollten Sie in der Lage sein, Schritt durch Ihren Client-Code und es wird automatisch in Ihrem WCF-Dienst springen, sobald Sie es Methode aufrufen, dann können Sie genau sehen, wo es fehlschlägt. Ich hoffe, das hilft

0voto

Jojo Sardez Punkte 8150

Haben Sie versucht, den Dienst zu öffnen, nachdem Sie ihn mit initialisiert haben:

client.Open();

Wenn das Problem weiterhin besteht, liegt es vielleicht an der WCF-Methode selbst. Versuchen Sie, Ihrer Methode Haltepunkte hinzuzufügen und sie zu debuggen, um die Ursache des Fehlers zu finden. Sie können auch Profiler verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X