Laden...

Der Remoteserver hat einen Fehler zurückgegeben: NotFound.

Erstellt von InSiDeR vor 12 Jahren Letzter Beitrag vor 12 Jahren 4.439 Views
I
InSiDeR Themenstarter:in
95 Beiträge seit 2011
vor 12 Jahren
Der Remoteserver hat einen Fehler zurückgegeben: NotFound.

Hallo zusammen,
habe einen Webservice, welcher Rechner anpingt, MAC Adressen anhand von IP Adressen ermittelt und Rechner mittels WOL aufweckt.

Drei Web Methoden in einem Webservice.

Der Webservice funktioniert per Debugger sowie per Aufruf über meinen lokalen IIS. Alle Methoden klappen ebenfalls.

Nun habe ich den Webservice in mein Projekt eingebunden und versuche meine Rechner anzupingen. Klappt wunderbar und alles funktioniert.

Nun mache ich das gleiche mit der MAC Adresse. Ich erstelle einen EventHandler und eine entsprechende Methode. Rufe alles genauso auf, wie beim Pingen. Nur erhalte ich einen Fehler (Anhang).

Woran könnte das liegen? Bin echt ratlos 😦 Das eine klappt, das Andere nicht.

WakeOnLAN.pingRequest.Service1SoapClient myPing = new WakeOnLAN.pingRequest.Service1SoapClient();
myPing.GetMACAddressCompleted += myPing_myMACAddressEvent;
myPing.GetMACAddressAsync(ipAddress);
public void myPing_myMACAddressEvent(Object objSender, WakeOnLAN.pingRequest.GetMACAddressCompletedEventArgs e)
        {
            string macAddress = e.Result;
        }

Mein Webservice:

[DllImport("iphlpapi.dll", ExactSpelling = true)]
        static extern int SendARP(int DestIP, int SrcIP, byte[] pMacAddr, ref uint PhyAddrLen);

        [WebMethod]
        public string GetMACAddress(string hostNameOrAddress)
        {
            IPHostEntry hostEntry = Dns.GetHostEntry(hostNameOrAddress);
            if (hostEntry.AddressList.Length == 0)
                return null;

            byte[] macAddr = new byte[6];
            uint macAddrLen = (uint)macAddr.Length;
            if (SendARP((int)hostEntry.AddressList[0].Address, 0, macAddr, ref macAddrLen) != 0)
                return null;


            StringBuilder macAddressString = new StringBuilder();
            for (int i = 0; i < macAddr.Length; i++)
            {
                if (macAddressString.Length > 0)
                    macAddressString.Append(":");

                macAddressString.AppendFormat("{0:x2}", macAddr[i]);
            }

            return macAddressString.ToString();
        }

//edit: Bitte nicht wundern, dass mein Webservice "pingRequest" heisst. Ursprünglich war dieser nur für das pingen zuständig und ich hatte andere Webservices für Mac Adresse / WOL aber diese hab ich nun zusammengefügt.

Der Fehler bleibt übrigens auch, wenn ich die Webservices splitte in mehrere Dateien.

Hinweis von gfoidl vor 12 Jahren

Fehlermeldungen bitte direkt in den Text und zwar mit den [[nop][/nop]error]-Tags. Das erleichtert den Helfenden die Arbeit und kommt dir zu Gute.

Mit freundlichen Grüßen,
InSiDeR

2.298 Beiträge seit 2010
vor 12 Jahren

Interessant wäre ja was nicht gefunden wird.

Schreib doch mal ein Try-Catch um den Inhalt deiner Methode GetMACAddress und protokolliere mal den Fehler, oder gib ihn als out parameter an den Client zurück.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

G
538 Beiträge seit 2008
vor 12 Jahren

Verarbeitet dein Netzwerk WOL überhaupt korrekt?

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

I
InSiDeR Themenstarter:in
95 Beiträge seit 2011
vor 12 Jahren

Interessant wäre ja was nicht gefunden wird.

Schreib doch mal ein Try-Catch um den Inhalt deiner Methode GetMACAddress und protokolliere mal den Fehler, oder gib ihn als out parameter an den Client zurück.

In der Reference.cs, welche von Visual Studio erzeugt wird?

public WakeOnLAN.pingRequest.GetMACAddressResponse EndGetMACAddress(System.IAsyncResult result) {
                object[] _args = new object[0];
                WakeOnLAN.pingRequest.GetMACAddressResponse _result;
                try
                {
                    _result = ((WakeOnLAN.pingRequest.GetMACAddressResponse)(base.EndInvoke("GetMACAddress", _args, result)));
                }
                catch (System.Exception)
                {
                    
                    throw;
                }
                return _result;
            }

Was raus kommt:
Der selbe Fehler beim throw

Verarbeitet dein Netzwerk WOL überhaupt korrekt?

Das ist ja erstmal völlig egal. Ich möchte ja erstmal nur die MAC Adresse ermitteln und ausgeben. Dafür ist kein WOL vonnöten. Erst wenn das klappt, versuch ich die MAC Adresse der WebMethod "WakeonLan" mit zu geben.

Mit freundlichen Grüßen,
InSiDeR

2.298 Beiträge seit 2010
vor 12 Jahren

Interessant wäre ja was nicht gefunden wird.

Schreib doch mal ein Try-Catch um den Inhalt deiner Methode GetMACAddress und protokolliere mal den Fehler, oder gib ihn als out parameter an den Client zurück.

In der Reference.cs, welche von Visual Studio erzeugt wird?

Nein, in der Webservice Methode. Der liefert ja höchstwahrscheinlich den Fehler.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

I
InSiDeR Themenstarter:in
95 Beiträge seit 2011
vor 12 Jahren

Wenn ich nur den Webservice im lokalen IIS bzw. Debugger in Visual Studio aufrufe, funktioniert dieser einwandfrei ohne Fehlermeldungen.

Einzig bei

if (SendARP((int)hostEntry.AddressList[0].Address, 0, macAddr, ref macAddrLen) != 0)

wird folgende Warnung erzeugt

Fehlermeldung:
Warnung 1 "System.Net.IPAddress.Address" ist veraltet: ""This property has been deprecated. It is address family dependent. Please use IPAddress.Equals method to perform comparisons.
>
"" C:\Abschlussprojekt\PingRequest\PingRequest\PingRequest.asmx.cs 35 30 PingRequest

Das ist aber nicht tragisch.

Sooo...

[DllImport("iphlpapi.dll", ExactSpelling = true)]
        static extern int SendARP(int DestIP, int SrcIP, byte[] pMacAddr, ref uint PhyAddrLen);

        [WebMethod]
        public string GetMACAddress(string hostNameOrAddress)
        {
            try
            {
                IPHostEntry hostEntry = Dns.GetHostEntry(hostNameOrAddress);
                if (hostEntry.AddressList.Length == 0)
                    return null;

                byte[] macAddr = new byte[6];
                uint macAddrLen = (uint)macAddr.Length;
                if (SendARP((int)hostEntry.AddressList[0].Address, 0, macAddr, ref macAddrLen) != 0)
                    return null;


                StringBuilder macAddressString = new StringBuilder();
                for (int i = 0; i < macAddr.Length; i++)
                {
                    if (macAddressString.Length > 0)
                        macAddressString.Append(":");

                    macAddressString.AppendFormat("{0:x2}", macAddr[i]);
                }
                return macAddressString.ToString();
            }
            catch (Exception)
            {
                
                throw;
            }
        }

Hab alles aktualisiert. Es kommt der gleiche Fehler raus am gleichen Punkt. Im Webservice springt er nicht in den catch Block.

//edit:

Zum Vergleich::

pingRequest Methode (funktioniert)

public WakeOnLAN.pingRequest.pingRequestResponse EndpingRequest(System.IAsyncResult result) {
                object[] _args = new object[0];
                WakeOnLAN.pingRequest.pingRequestResponse _result = ((WakeOnLAN.pingRequest.pingRequestResponse)(base.EndInvoke("pingRequest", _args, result)));
                return _result;
            }

GetMACAddress Methode (funktioniert nicht)

public WakeOnLAN.pingRequest.GetMACAddressResponse EndGetMACAddress(System.IAsyncResult result) {
                object[] _args = new object[0];
                WakeOnLAN.pingRequest.GetMACAddressResponse _result = ((WakeOnLAN.pingRequest.GetMACAddressResponse)(base.EndInvoke("GetMACAddress", _args, result)));
                return _result;
            }

Wenn ich mit dem Debugger durchgehe, erhält die MAC Adresse immer "null"

//edit2:
Habe nun mal weiter probiert. Schon sehr kurios. Manchmal klappt es, manchmal nicht.

1.) Ist der Rechner eingeschaltet, erhalte ich manchmal die MAC und manchmal nur null. Bei meinem eigenen Rechner, welcher eingeschaltet ist, erhalte ich den NotFound Fehler.

2.) Ist der Rechner ausgeschaltet, erhalte ich die NotFound Fehlermeldung oder null.

3.) Ist die IP/Namensauflösung nicht korrekt erhalte ich die NotFound Fehlermeldung.

Woran kann das liegen, dass es manchmal klappt und manchmal nicht? Die IP Adresse steht ja in der Liste, egal ob der Rechner ein- oder ausgeschaltet ist. Schon sehr kurios...

Mit freundlichen Grüßen,
InSiDeR

2.298 Beiträge seit 2010
vor 12 Jahren

Unabhängig von deinen Ergebnissen, du sollst die Exception nicht weiter werfen! - Du sollst sie entweder loggen oder aber als Outparameter zurück geben.


[WebMethod]
public string MyMethod(string myInput, out string error)
{
     string myResult = string.Empty;
     error = string.Empty; 
     try
     {
        // the whole method
     }
     catch(Exception ex)
     {
           error = ex.ToString();
     }

     return myResult;
}

Ganz allgemein lässt sich doch aus deinen Ergebnissen raus lesen, dass du nur Mac-Adressen für Rechner bekommst die eingeschaltet und erreichbar sind.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

I
InSiDeR Themenstarter:in
95 Beiträge seit 2011
vor 12 Jahren

Genau das ist es, was passiert.

Benötige aber die MAC Adressen auch von ausgeschalteten Rechnern. Macht ja sonst keinen Sinn, da ich die ausgeschalteten PC's starten möchte.

Mit freundlichen Grüßen,
InSiDeR

U
1.688 Beiträge seit 2007
vor 12 Jahren

Benötige aber die MAC Adressen auch von ausgeschalteten Rechnern.

Ja, dann musst Du sie eben besorgen und speichern, wenn der Rechner an ist. Der Rechner muss einmal bekannt gemacht werden - wie soll es anders gehen?

I
InSiDeR Themenstarter:in
95 Beiträge seit 2011
vor 12 Jahren

Dann muss ich das wohl notfalls so lösen und einfach zusätzlich die MAC Adresse in die XML Datei speichern und darüber das Magic Paket absenden. Spare ich mir einen Webservice zum ermitteln der MAC. Das probiere ich einfach mal aus 😃

Mit freundlichen Grüßen,
InSiDeR