2017-01-18 11 views
0

Ich muss wissen, ob ich einen WCF-Dienst mithilfe von TFTP erstellen kann, um Daten von einem Gerät zu erhalten. Ich weiß, dass ich eine Anwendung mit C# erstellen kann, um dies zu tun, aber ich versuche, es zu einer webbasierten Anwendung zu machen. Auch der WCF muss auf IIS gehostet werden. Ich möchte einen WCF-Dienst verwenden, um eine Verbindung zu starten und dann ein Bild von meinem Gerät zu ziehen. Wenn ich meinen Code ausführe, scheint es kein Problem mit dem SendTo-Befehl zu haben, aber es gibt mir immer eine "System.Net.Sockets.SocketException (0x80004005): Ein Verbindungsversuch ist fehlgeschlagen, weil die verbundene Partei nach einem Punkt nicht richtig antwortete oder fehlgeschlagen, weil der verbundene Host bei System.Net.Sockets.Socket nicht reagiert hat. ReceiveFrom (...). Ist dies, weil ich eine netTcpBinding verwende? Kann ich dies mit einer einfachen HTTP-Bindung tun? ? oder etwas anderes oder vielleicht ist es einfach nicht möglich, diesen Dienst zu erstellen WCF, Gedanken ??Kann ich mit WCF Daten von einem Gerät mit tftp (UDP) abrufen?

Service Code Snippet:

public byte[] ipTftpGet(String xferFileName) 
{... 
    byte[] rcvBuffer = new byte[5200]; 
    .... 

try 
{  
    ipEndPointFtp = new IPEndPoint(ipAddress, 69); 
    tftpS = new Socket(ipEndPointFtp.AddressFamily, SocketType.Dgram, ProtocolType.Udp); 
    remoteEP = ipEndPointFtp; 
    // Request and Receive first Data Packet From TFTP Server 
    tftpS.SendTo(sndBuffer, nameLen, System.Net.Sockets.SocketFlags.None, remoteEP); 
    tftpS.ReceiveTimeout = 1000; 

    try 
    {     
     len = tftpS.ReceiveFrom(rcvBuffer, ref remoteEP);//tftpS.ReceiveFrom(rcvBuffer, ref remoteEP); 
     rcvBuffer[len] = 0x00; 
    } 
    catch (System.Net.Sockets.SocketException ex) 
    { 
     xferValid = false; 
     errMsgStr = ex.ToString(); 
    } 
} 

Web.config:

<services> 
    <service behaviorConfiguration="mexBehavior" 
      name="ComService.ComService"> 
    <endpoint address="ComService" binding="netTcpBinding" 
     contract="ComService.IComService" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://localhost:8090" /> 
     <add baseAddress="http://localhost:8080" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 

Antwort

0

Ich konnte das Problem feststellen. TFTP verwendet UDP und anscheinend können Sie IIS nicht verwenden, um den Dienst zu hosten. Sie können den Dienst mithilfe einer Windows-Konsole oder einer Windows Forms-Anwendung hosten. Ich habe eine einfache Konsolenanwendung und dann meine web.config aktualisiert (jetzt ein App.config) wie folgt:

Program.cs:

namespace TFTPConsoleHost 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (ServiceHost host = new ServiceHost(typeof(TFTPService.TFTPService))) 
      { 
       host.Open(); 
       Console.WriteLine("Host started @ " + DateTime.Now.ToString()); 
       Console.ReadLine(); 
      } 

     } 
    } 
} 

App.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/> 
    </startup> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
      <serviceThrottling maxConcurrentCalls="1000" maxConcurrentInstances="1000" maxConcurrentSessions="1000"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <netTcpBinding> 
     <binding name="unsecured"> 
      <security mode="None"/> 
     </binding> 
     </netTcpBinding> 
    </bindings> 
    <services> 
     <service name="TFTPService.TFTPService"> 
     <endpoint address="soap.udp://localhost:8060/" binding="udpBinding" contract="TFTPService.ITFTPService"/> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8060/"/> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    </system.serviceModel> 
</configuration> 
Verwandte Themen