Frage

Ich habe einen WCF -Dienst (.NET 3.5) erstellt, der Daten aus einem DB greift und eine Liste von Objekten zurückgibt. Es funktioniert gut. Ich habe es mit der WCftestClient -Anwendung getestet und die gewünschten Ergebnisse erhalten.

Jetzt habe ich versucht, eine ASP.NET -Webanwendung zu erstellen und den Dienst zu konsumieren. Nach Aktivierung <serviceDebug includeExceptionDetailInFaults="true"/> In der Konfigurationsdatei lautet die Fehlermeldung "Objektreferenz nicht auf eine Instanz eines Objekts festgelegt".

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

Vielen Dank!

Update 1 - Ich habe einen Verweis auf den Dienst erstellt. Als ich meine sehr grundlegende Test -App ausführte, habe ich basierend auf dem auf der Standardwebseite des Dienstes angezeigten Beispielcode die Nachricht "Objektreferenz nicht auf eine Instanz eines Objekts festgelegt" erhalten.

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

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 Debug -Informationen zu erhalten.

War es hilfreich?

Lösung

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

client.Open();

Wenn das Problem immer noch besteht, liegt es vielleicht auf der WCF -Methode selbst. Versuchen Sie, Ihre Methode Bruchpunkte hinzuzufügen, und debuggen Sie die Ursache des Fehlers ab. Sie können auch Profiler verwenden.

Andere Tipps

Sie müssen auch den Dienst konfigurieren, um Ausnahmetails in den Ergebnissen zu ermöglichen. Folgen Sie den Informationen hier, um dies zu erreichen.

Ich gehe davon aus, dass Ihre ASP.NET -App erwartet, bestimmte Informationen aus dem Dienst zu fangen, den Sie nicht für die Bereitstellung eingerichtet haben, und daher den Null -Objektfehler.

Ich hätte dies als Kommentar geschrieben, konnte aber nicht herausfinden, wie es geht, also werde ich wohl eine Antwort versuchen.

Sie haben erwähnt, dass Sie den integrierten Testkunden verwendet haben. Wenn Sie jedoch Ihre Client -Anwendung (die Website, mit der Sie Ihren neuen Dienst aufrufen möchten), haben Sie den Endpunkt (Web.Config) so konfiguriert, dass Sie das Ende Ihres WCF -Dienstes übereinstimmen ? Zum Beispiel eine Client -App, 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 Service eine Liste zurück, die Standarddienstreferenz dass Sie Ihrem Kunden sehr wahrscheinlich in Array eingestellt werden. Klicken Sie mit der rechten Maustaste auf die Service -Referenz, die Ihr Client jetzt hat, und wählen Sie die Service -Referenz im Dropdown -Feld für den Sammlungstyp anstelle von System.Array, system.collections.generic.List aus.

Wenn Sie Details zur Konfiguration benötigen, überprüfen Sie hier http://msdn.microsoft.com/en-us/library/dd936243.aspx

Platzieren Sie einen Breaking -Punkt in der Methode Page_load Ihres Clients. Sie sollten in der Lage sein, Ihren Client -Code durchzusetzen, und es wird automatisch in Ihrem WCF -Dienst einsteigen, sobald Sie die Methode anrufen, und Sie können genau sehen, wo er fehlschlägt. Hoffe das hilft

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top